На устройствах Android есть несколько разделов, в которых хранятся определенные части программного обеспечения устройства. Каждый раздел содержит образ раздела (файл IMG) или снимок всего программного обеспечения для раздела. На рисунке 1 показана структура основных разделов на устройстве:
Рисунок 1. Макет основных разделов.
Разделы бывают трех типов:
Системные разделы – это разделы, которые обновляются при обновлении ОС и других функций.
system,bootиinit_boot– это основные системные разделы.Разделы поставщика содержат код, относящийся к устройству и оборудованию, который может никогда не обновляться после первоначального выпуска. Разделы
vendor,vendor_bootиodm– это основные разделы поставщика.Необновляемые разделы – это разделы, содержимое которых не обновляется или обновляется с помощью пользовательских данных.
Код в системном разделе и разделе поставщика может взаимодействовать через стабильный интерфейс поставщика (VINTF).
Системные разделы
Ниже приведен список всех системных разделов и их назначение.
boot. В этом разделе содержится образ ядра Generic Kernel Image (GKI). В этом разделе также содержится общий ramdisk на устройствах с Android 12 и более ранних версий. Дополнительную информацию об универсальном образе ramdisk можно найти в разделе Содержимое универсального образа ramdisk.init_boot(Android 13 и более поздние версии). Этот раздел содержит универсальный RAM-диск. В Android 11 и 12 общий ramdisk находится в разделеboot.systemраздел. Этот раздел содержит образ системы, используемый для продуктов OEM.system_extраздел. Этот раздел содержит системные ресурсы и проприетарные системные модули, которые расширяют общий образ системы в разделеsystem.system_dlkm. Этот раздел содержит модули GKI. Дополнительную информацию об этом разделе можно найти в статье Как реализовать раздел модуля GKI.productраздел. Этот раздел может содержать модули, относящиеся к определенному продукту и не входящие в другие разделы.pvmfwраздел. В этом разделе хранится встроенное ПО защищенной виртуальной машины (pvmfw) – первый код, который выполняется в защищенных виртуальных машинах. Подробнее о защищенной прошивке виртуальной машины…generic_bootloader. Этот раздел содержит универсальный загрузчик.
Секции поставщика
Ниже приведен список всех разделов поставщика и их назначение.
vendor_bootраздел. Этот раздел содержит код загрузчика, относящийся к определенному поставщику. Подробнее о загрузочных разделах поставщика…recoveryраздел. В этом разделе хранится образ восстановления, который загружается во время беспроводного обновления (OTA). Устройства, поддерживающие бесшовные обновления, могут хранить образы для восстановления в виде RAM-диска, содержащегося в образеbootилиinit_boot. Подробнее о параллельных обновлениях…misc. Этот раздел используется разделом восстановления и имеет размер не менее 4 КБ.vbmeta. Этот раздел содержит информацию о проверке при запуске для всех разделов. Эта информация подтверждает, что образы, установленные в каждом разделе, являются доверенными. Подробнее о проверке при запуске…vendor. Этот раздел содержит любые двоичные файлы, относящиеся к определенному поставщику и не являющиеся достаточно универсальными для распространения в AOSP.vendor_dlkm. Этот раздел содержит модули ядра поставщика. Хранение модулей ядра поставщика в этом разделе вместо разделаvendorпозволяет обновлять модули ядра без обновления разделаvendor. Подробнее о разделах DKLM поставщиков и ODM…odm. Этот раздел содержит настройки производителя оригинального дизайна (ODM) для пакетов поддержки плат (BSP) поставщика системы на кристалле (SoC). Такие настройки позволяют производителям оригинального оборудования заменять или настраивать компоненты SoC, а также реализовывать модули ядра для компонентов, демонов и функций, относящихся к определенной плате, на уровнях абстрагирования оборудования (HAL). Этот раздел необязателен. Обычно этот раздел используется для хранения настроек, чтобы устройства могли использовать одно изображение поставщика для нескольких SKU оборудования. Подробнее о разделах ODM…odm_dlkmраздел. Этот раздел предназначен для хранения модулей ядра ODM. Храня модули ядра ODM в этом разделе, а не в разделеodm, вы можете обновлять модули ядра ODM без обновления разделаodm. Подробнее о разделах DKLM поставщиков и ODM…radioраздел. Этот раздел содержит образ радио и необходим только для устройств, которые включают радио со специальным программным обеспечением в выделенном разделе.
Необновляемые разделы
Ниже приведен список всех необновляемых разделов и их назначение.
cache. Этот раздел содержит временные данные и является необязательным, если на вашем устройстве используются автоматические обновления. Этот раздел не должен быть доступен для записи из загрузчика, но должен быть доступен для удаления. Размер раздела зависит от типа устройства и наличия свободного места наuserdata. Обычно достаточно 50–100 МБ.userdataраздел. Этот раздел содержит установленные пользователем приложения и данные, в том числе данные персонализации.metadataраздел. Если на устройстве используется шифрование метаданных, в этом разделе хранится ключ шифрования метаданных. Размер этого раздела составляет не менее 16 МБ, он не зашифрован, и для его данных не создаются снимки. Этот раздел удаляется при сбросе настроек устройства.
Правила и рекомендации по обновлению разделов
Мы рекомендуем обновлять все системные разделы вместе и все разделы поставщиков вместе. Обновляя набор разделов целиком, вы можете проверить, остаются ли стабильными интерфейсы между изображениями в каждом разделе.
Независимо от того, как вы обновляете разделы, следующие разделы должны быть обновлены из-за тесно связанных зависимостей и отсутствия стабильных API:
- Разделы
bootиsystem_dlkm - разделы
init_boot,system,system_extиproduct;
Динамические разделы
Устройства с Android 11 и более поздними версиями ОС поддерживают динамические разделы. Это система разделов пользовательского пространства для Android, которая позволяет создавать, изменять размер или удалять разделы во время беспроводных обновлений. Подробнее о динамических разделах…
Варианты товаров Soong
Система сборки Soong использует варианты изображений, чтобы разделить зависимости сборки. Нативные модули (/build/soong/cc) могут изменять модули системного процесса до основного варианта, а модули процесса поставщика – до варианта поставщика. Модуль в одном варианте образа не может быть связан с другими модулями в другом варианте образа.
В Android 12 и более поздних версий системный модуль с объектом vendor_available: true создает вариант поставщика в дополнение к основному варианту. Чтобы создать вариант товара, необходимо определить свойство "вариант товара" product_available: true. Некоторые библиотеки VNDK без product_available: true недоступны для модулей продукта.