Обзор разделов

Устройства Android содержат несколько разделов или отдельных областей дискового пространства, используемых для хранения определённых частей программного обеспечения устройства. Каждый раздел содержит образ раздела (файл IMG) или снимок всего программного обеспечения для этого раздела. На рисунке 1 показана структура основных разделов на устройстве:

Компоновка основных разделов.

Рисунок 1. Схема расположения основных разделов.

Разделы подразделяются на три категории:

  • Системные разделы — это разделы, которые обновляются при обновлении ОС и других компонентов. system , boot и init_boot являются основными системными разделами.

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

  • Необновляемые разделы — это разделы, содержимое которых либо не обновляется, либо обновляется пользовательскими данными.

Код в системных разделах и разделах поставщика может взаимодействовать с помощью стабильного интерфейса, называемого интерфейсом поставщика (VINTF) .

Системные разделы

Ниже приведен список всех системных разделов и их использование:

  • boot раздел. Этот раздел содержит образ ядра Generic Kernel Image (GKI). Этот раздел также содержит универсальный RAM-диск на устройствах с Android 12 и более ранними версиями. Подробнее о универсальном RAM-диске см. в разделе «Содержимое образа универсального RAM-диска» .

  • Раздел init_boot (Android 13 и выше). Этот раздел содержит универсальный RAM-диск. В Android 11 и 12 универсальный RAM-диск находится в boot разделе.

  • system раздел. Этот раздел содержит образ системы, используемый для OEM-продуктов.

  • Раздел system_ext . Этот раздел содержит системные ресурсы и фирменные системные модули, расширяющие общий образ системы в system разделе.

  • Раздел system_dlkm . Этот раздел содержит модули GKI. Подробнее об этом разделе см. в разделе «Реализация раздела модулей GKI» .

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

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

  • Раздел generic_bootloader . Этот раздел содержит универсальный загрузчик.

Разделы поставщика

Ниже приведен список всех разделов поставщиков и их использование:

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

  • Раздел recovery . В этом разделе хранится образ восстановления, который загружается во время беспроводного обновления (OTA). Устройства, поддерживающие бесшовное обновление, могут хранить образы восстановления в виде RAM-диска, содержащегося в образе boot или init_boot . Подробнее о бесшовных обновлениях см. в разделе A/B (бесшовные) обновления .

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

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

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

  • Раздел vendor_dlkm . Этот раздел содержит модули ядра поставщика. Разместив модули ядра поставщика в этом разделе, а не в разделе vendor , вы сможете обновлять модули ядра без обновления раздела vendor . Подробнее см. в разделе Разделы DKLM поставщика и ODM .

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

  • Раздел odm_dlkm . Этот раздел предназначен для хранения модулей ядра ODM. Разместив модули ядра ODM в этом разделе, а не в разделе odm , вы можете обновлять модули ядра ODM, не обновляя раздел odm . Подробнее см. в разделе «Разделы Vendor и ODM DKLM» .

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

Необновляемые разделы

Ниже приведен список всех необновляемых разделов и их использование:

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

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

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

Правила и рекомендации по обновлению разделов

Мы рекомендуем обновить все системные разделы как единое целое, а также все разделы поставщика как единое целое. Обновив набор разделов как единое целое, вы сможете проверить стабильность интерфейсов между образами в каждом разделе.

Независимо от способа обновления разделов, следующие разделы необходимо обновить из-за тесно связанных зависимостей и отсутствия стабильных API:

  • Разделы boot и system_dlkm
  • разделы init_boot , system , system_ext и product

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

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

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

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

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