Skip to content

Параграф 4: Что такое Ядро

Ядро операционной системы - в данном случае ОС Android - это компонент, который помогает вашим приложениям взаимодействовать с вашим оборудованием.

Оно управляет системными ресурсами, при необходимости обменивается данными с внешними устройствами и т. д. Android использует вариант ядра Linux, содержит базовый набор драйверов, которые необходимы для работы устройства. Поскольку ядро Android по умолчанию является производным от ядра Linux, можно с уверенностью сказать, что ядро Android также является монолитным.

Рассмотрим пример: предположим, вы установили приложение для съемки фотографий. Для этого вам нужно получить доступ к камере вашего телефона. Но приложение не может этого сделать. Оно не может напрямую получить доступ к камере, чтобы делать фотографии. Вместо этого оно посылает запрос ядру, и ядро предоставляет доступ к камере.

Без ядра для приема и отправки информации разработчикам пришлось бы писать код для каждого отдельного события для каждого отдельного элемента ПО вашего устройства. С ядром все, что им нужно делать, это взаимодействовать с ним через API системы Android, а разработчикам нужно только заставить ПО устройства взаимодействовать с ядром.

AndroidArch

Почему ядро должно постоянно обновляться?

Ядро Linux постоянно меняется. Множество улучшений попадает в ядро, чтобы сделать его более надежным, безопасным и продвинутым каждый день. Вполне логично, что вся эта дельта улучшений попадает в ядро Android при любой возможности. Многие производители сохраняют ядро неизменным при незначительном обновлении Android, в основном потому, что обновление ядра (называемое BSP - Board Support package) часто приходит от производителя чипсета (TI, Samsung, Qualcomm, Mediatek и т.д.).

При изменении ядра для обновления Android, часто требуется много тестирования и обеспечения стабильности. Поэтому это часто приводит к задержке обновлений Android, а иногда и к прекращении обновлений ядра, когда поставщики чипсетов не поддерживают их. Так же это объясняет, почему производители не очень часто обновляют версию ядра вместе с версией Android.

Дерево устройства (DT)

Дерево устройств (DT) - это структура данных, состоящая из именованных узлов и свойств, которые описывают оборудование которое, в обычных условиях, обнаружить невозможно. Операционные системы, такие как ядро Linux, используемое в Android, используют DT для поддержки широкого спектра аппаратных конфигураций, используемых в устройствах на базе Android. Производители оборудования снабжают ядро своими собственными DT, которые Linux затем компилирует в файл Device Tree Blob (DTB), используемый загрузчиком.

Оверлей дерева устройства (DTO) позволяет наложить центральный блок дерева устройств (DTB) на дерево устройств. Загрузчик, использующий DTO, может поддерживать DT системы-на-чипе (SoC) и динамически накладывать DT для конкретного устройства, добавляя узлы в дерево и внося изменения в свойства существующего дерева.

Терминология

  • DT — Дерево устройства
  • DTB — Блоб дерева устройства
  • DTBO — Блоб дерева устройства для оверлея
  • DTC — Компилятор дерева устройства
  • DTO — Оверлей дерева устройства
  • DTS — Исходник дерева устройства
  • FDT — Сплющенное дерево устройства. Двоичный формат, содержащийся в блоб-файле .dtb

Типы ядра

  • Android Common Kernel (ACK)Ядро, которое находится ниже ядра LTS и включает в себя исправления, представляющие интерес для сообщества Android, которые не были объединены в основные ядра Linux или ядра с длительной поддержкой (LTS). Более новые ACK (версии 5.4 и выше) также известны как ядра GKI, поскольку они поддерживают разделение кода Generic Kernel, не зависящего от аппаратного обеспечения, и модулей GKI, не зависящих от аппаратного обеспечения.

  • Android Open Source Project (AOSP) kernel

  • Feature kernelЯдро, для которого гарантированно реализованы функции релиза платформы. Например, в Android 12 двумя функциональными ядрами были android12-5.4 и android12-5.10. Функции Android 12 не могут быть перенесены обратно на ядра 4.19 после обновления; набор функций будет аналогичен устройству, которое было запущено с 4.19 на R и обновлено до S).

  • Generic Core KernelЧасть ядра GKI, которая является общей для всех устройств.

  • Generic Kernel Image (GKI) kernelЛюбое более новое (5.4 и выше) ядро ACK (в настоящее время только aarch64). Это ядро состоит из двух частей: ядро GKI с общим для всех устройств кодом и модули ядра GKI, разработанные Google, которые могут быть динамически загружены на устройства, где это необходимо.

  • Launch KernelЯдро, которое подходит для запуска устройства для данного выпуска платформы Android. Например, в Android 12 допустимыми ядрами для запуска были 4.19, 5.4 и 5.10.

  • Long Term Supported (LTS) kernelЯдро Linux, которое поддерживается от 2 до 6 лет. Ядра LTS выпускаются раз в год и являются основой для каждого из ACK Google.

Типы ветвей ядра

  • ACK KMI kernel branch

    Ветвь, с которой собираются ядра GKI. Например, android12-5.10 и android13-5.15.

  • Android-mainline

    Основная ветвь разработки для функций Android. Когда новое ядро LTS объявляется выше по течению, соответствующее новое ядро GKI ответвляется от android-mainline.

  • Linux mainline

    Основная ветвь разработки для вышестоящих ядер Linux, включая ядра LTS.