Общие сведения о разделах

На устройствах 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 недоступны для модулей продукта.