Обзор

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

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

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

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

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

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

  • раздел init_boot . Этот раздел содержит общий виртуальный диск для устройств, работающих под управлением 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. Устройства, поддерживающие плавное обновление, могут хранить образы восстановления в виде виртуального диска, содержащегося в 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 разделе.

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

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

  • В Android 10 или более ранней версии системный модуль автоматически создает основные варианты. Он также может создавать варианты поставщиков, определяяvendor_available 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 недоступны для модулей продукта.