Что такое ядро? Если вы потратите какое-то время на форумы Android, блоги, практические посты или онлайн-обсуждения, вы скоро услышите, как люди говорят о ядре. Ядро не является чем-то уникальным для Android - у iOS и MacOS есть такое, у Windows - одно, у BlackBerry QNX - одно, фактически, оно есть у всех операционных систем высокого уровня. Нас интересует Linux, так как Android использует его. Попробуем разобраться, что это такое и что оно делает.
Устройства Android используют ядро Linux, но каждый телефон использует свою собственную версию. Сопровождающие ядра Linux хранят все аккуратно и доступно, участники (например, Google) добавляют или изменяют вещи, чтобы лучше соответствовать их потребностям, а также люди, делающие оборудование, также вносят свой вклад, потому что им нужно разрабатывать драйверы оборудования для частей, которые они используют для версия ядра, которую они используют. Вот почему независимым разработчикам и хакерам Android требуется время, чтобы перенести новые версии на старые устройства и заставить все работать. Драйверы, написанные для работы с одной версией ядра для телефона, могут не работать с другой версией программного обеспечения на том же телефоне. И это важно, потому что одной из основных функций ядра является управление оборудованием. Это очень много исходного кода, с большим количеством опций при его создании, чем вы можете себе представить, но в конечном итоге это всего лишь посредник между аппаратным и программным обеспечением.
Когда программному обеспечению требуется какое-либо оборудование, оно отправляет запрос в ядро. И когда мы говорим что-либо, мы имеем в виду что-либо. От яркости экрана до уровня громкости, до вызова по радио, даже то, что нарисовано на дисплее, в конечном итоге контролируется ядром. Например, когда вы нажимаете кнопку поиска на телефоне, вы указываете программе, что нужно открыть приложение поиска. Что происходит, так это то, что вы коснулись определенной точки на дигитайзере, который сообщает программе, что вы коснулись экрана в этих координатах. Программное обеспечение знает, что при прикосновении к этому конкретному месту открывается диалоговое окно поиска. Ядро - это то, что заставляет дигитайзер искать (или прослушивать, события «прослушиваются») на предмет касаний, помогает выяснить, где вы коснулись, и сообщает системе, к которой вы прикоснулись. В свою очередь, когда система получает событие касания в определенной точке от ядра (через драйвер), она знает, что рисовать на экране. И аппаратное, и программное обеспечение взаимодействуют с ядром в обоих направлениях, и ваш телефон знает, когда что-то делать. Вход с одной стороны отправляется как выход на другую, независимо от того, играете ли вы в Angry Birds или подключаетесь к Bluetooth вашего автомобиля.
Звучит сложно, и это так. Но это также довольно стандартная компьютерная логика - для каждого события генерируется какое-то действие, и в зависимости от этого действия происходят какие-то действия с работающим программным обеспечением. Без ядра, принимающего и отправляющего информацию, разработчикам придется писать код для каждого отдельного события для каждого отдельного компонента оборудования на вашем устройстве. С ядром все, что им нужно сделать, - это связаться с ним через API системы Android, а разработчикам аппаратного обеспечения нужно только заставить аппаратное устройство взаимодействовать с ядром. Хорошая вещь заключается в том, что вам не нужно точно знать, как или почему ядро делает то, что оно делает, просто понимание того, что это переход от программного обеспечения к аппаратному обеспечению, дает вам довольно хорошее представление о том, что происходит под стеклом.
Вроде как дает совершенно новый взгляд на тех парней, которые не спят всю ночь, чтобы работать над ядрами для вашего телефона, не так ли?