Обзор

Устройства Android включают в себя несколько разделов, которые выполняют различные функции в процессе загрузки.

Стандартные перегородки

  • boot раздел. Этот раздел содержит образ ядра и создается с помощью mkbootimg . Вы можете использовать виртуальный раздел для прошивки любого образа напрямую, без прошивки нового загрузочного раздела. Этот раздел также содержит общий ramdisk в устройствах, выпущенных до Android 13.

    • kernel. Виртуальный раздел kernel перезаписывает ядро ​​( zImage , zImage-dtb , Image.gz-dtb ), записывая новый образ ядра поверх старого образа ядра. Если предоставленное ядро ​​разработки несовместимо, вам может потребоваться обновить раздел vendor , system или dtb (если есть) со связанными модулями ядра.

    • ramdisk. Раздел виртуального ramdisk перезаписывает ramdisk, записывая новый образ ramdisk поверх старого образа ramdisk.

    Операция перезаписи определяет начальное местоположение существующего образа в eMMC и копирует новый образ в это местоположение. Новый образ (ядро или ramdisk) может быть больше существующего; чтобы освободить место, загрузчик может переместить данные вслед за образом или прекратить операцию с ошибкой.

  • Раздел init_boot . Этот раздел содержит универсальный ramdisk для устройств, запускаемых с Android 13 и выше.

  • system раздел. Этот раздел содержит фреймворк Android.

  • Раздел odm . Этот раздел содержит настройки оригинального производителя дизайна (ODM) для пакетов поддержки плат (BSP) поставщика систем на кристалле (SoC). Такие настройки позволяют ODM заменять или настраивать компоненты SoC и внедрять модули ядра для компонентов, специфичных для платы, демонов и функций, специфичных для ODM, на уровнях абстракции оборудования (HAL). Этот раздел является необязательным; обычно он используется для хранения настроек, чтобы устройства могли использовать один образ поставщика для нескольких аппаратных SKU. Подробности см. в разделе Разделы ODM .

  • Раздел odm_dlkm . Этот раздел предназначен для хранения модулей ядра ODM. Хранение модулей ядра ODM в разделе odm_dlkm (в отличие от раздела odm ) позволяет обновлять модули ядра ODM без обновления раздела odm .

  • Раздел recovery . Этот раздел хранит образ восстановления, который загружается во время процесса OTA. Устройства, поддерживающие бесшовные обновления, могут хранить образы восстановления как ramdisk, содержащийся в образе boot или init_boot (а не как отдельный образ).

  • Раздел cache . Этот раздел хранит временные данные и является необязательным, если устройство использует бесшовные обновления. Раздел кэша не обязательно должен быть доступным для записи из загрузчика, но должен быть стираемым. Размер раздела зависит от типа устройства и доступности места на userdata ; обычно достаточно 50–100 МБ.

  • Раздел misc . Этот раздел используется разделом восстановления и имеет размер 4 КБ или больше.

  • Раздел userdata . Этот раздел содержит установленные пользователем приложения и данные, включая данные настройки.

  • Раздел metadata . Этот раздел используется для хранения ключа шифрования метаданных, когда устройство использует шифрование метаданных . Размер составляет 16 МБ или больше. Он не зашифрован, и его данные не сохраняются. Он стирается при сбросе настроек устройства до заводских. Использование этого раздела строго ограничено.

  • Раздел vendor . Этот раздел содержит любой двоичный файл, который не распространяется в AOSP. Если устройство не содержит конфиденциальной информации, вы можете пропустить этот раздел.

  • Раздел vendor_dlkm . Этот раздел предназначен для хранения модулей ядра поставщика. Хранение модулей ядра поставщика в разделе vendor_dlkm (в отличие от раздела vendor ) позволяет обновлять модули ядра без обновления раздела vendor .

  • Раздел radio . Этот раздел содержит образ радио и необходим только для устройств, которые включают радио с радиоспецифичным программным обеспечением в выделенном разделе.

  • Раздел tos . Этот раздел хранит двоичный образ Trusty OS и используется только в том случае, если устройство включает Trusty. Подробности см. в разделе Разделы TOS .

  • Раздел pvmfw . В этом разделе хранится защищенная прошивка виртуальной машины (pvmfw), которая является первым кодом, работающим в защищенных виртуальных машинах. Подробнее см. в разделе защищенная прошивка виртуальной машины .

Динамические разделы

Устройства под управлением Android 11 и выше могут поддерживать динамические разделы, которые представляют собой систему разбиения пользовательского пространства для Android, позволяющую создавать, изменять размер или уничтожать разделы во время обновлений по беспроводной сети (OTA). Подробности см. в разделе Динамические разделы .

Назначить критические разделы

Если для работы устройства требуются определенные разделы или данные, необходимо обозначить эти разделы или данные как полностью защищенные или как перепрошиваемые, то есть их можно перестроить, предоставить или извлечь с помощью команды fastboot oem . Сюда входят такие данные, как заводские настройки для каждого устройства, серийные номера, данные калибровки и многое другое.

Изменения в Android 11

Android 11 включает в себя многочисленные изменения разделов, в том числе ограничения на привязку к библиотекам и новые варианты образов Soong.

Разметка раздела Android

Рисунок 1. Схема разделов в Android 11

  • Единый системный образ (SSI). Новый концептуальный образ, содержащий образы system и system_ext . Когда эти разделы являются общими для набора целевых устройств, эти устройства могут совместно использовать SSI и пропустить построение образов system и system_ext .

  • Раздел system_ext . Новый раздел, который может использовать system ресурсы и может включать системные модули, которые:

    • Расширьте системные модули AOSP в system разделе. Мы рекомендуем перенести такие модули в AOSP, чтобы их можно было установить в system раздел позже.

    • Связывание OEM или SoC-специфичных модулей. Мы рекомендуем разделять такие модули, чтобы их можно было установить в раздел product или vendor .

  • system раздел. Общий системный образ, используемый для OEM-продуктов. Мы рекомендуем перемещать фирменные модули из system раздела, либо передавая их в AOSP, либо перемещая их в раздел system_ext .

  • Раздел product . Этот раздел теперь может использовать разрешенные интерфейсы для установки модулей, специфичных для продукта, которые не связаны ни с какими другими разделами.

Изменения в ВНДК

Vendor Native Development Kit (VNDK) — это набор библиотек, устанавливаемых в system раздел и предназначенных исключительно для поставщиков для реализации их HAL.

  • В Android 10 и ниже раздел vendor может ссылаться на библиотеки VNDK в system разделе, но не может ссылаться на другие библиотеки в system разделе. Собственные модули в разделе product могут ссылаться на любую библиотеку в system разделе.

  • В Android 11 и более поздних версиях разделы product и vendor могут ссылаться на библиотеки VNDK в system разделе, но не могут ссылаться на другие библиотеки в system разделе.

Варианты продукта Soon

Система сборки Soong использует варианты образов для разделения зависимостей сборки. Собственные модули ( /build/soong/cc ) могут мутировать модули системного процесса в основной вариант, а модули процесса поставщика в вариант поставщика; модуль в одном варианте образа не может ссылаться на другие модули в другом варианте образа.

  • В Android 10 или ниже системный модуль автоматически создает варианты ядра. Он также может создавать варианты вендора, определяя vendor_available: true в своих файлах Android.bp ; это позволяет модулям вендора связываться с системными модулями. Библиотеки VNDK, которые являются вариантами вендора system библиотек, также могут создавать варианты вендора для модулей вендора, определяя vendor_available: true в своих файлах Android.bp (см. пример ).

  • В Android 11 системный модуль также может создавать вариант продукта (в дополнение к вариантам ядра и поставщика), определяя vendor_available: true .

  • В Android 12 или выше системный модуль с vendor_available: true создает вариант поставщика в дополнение к основному варианту. Чтобы создать вариант продукта, необходимо определить product_available: true . Некоторые библиотеки VNDK без product_available: true недоступны для модулей продукта.