Разделы ODM

Android 10 включает поддержку создания разделов odm с использованием системы сборки Android.

О разделах ODM

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

В более ранних версиях Android такие настройки предотвращали использование образа одного поставщика для устройств с одним и тем же SoC (или с разными SoC, но в одном семействе). В Android 10 и более odm вы можете использовать отдельный раздел odm для настройки, что позволяет использовать один образ поставщика для нескольких аппаратных SKU.

Использование разделов продукта и ODM

В Android 9 добавлена ​​поддержка создания разделов product , что позволяет использовать один образ системы для нескольких SKU программного обеспечения, поставляемых разными образами product.img . В то время как раздел product предназначен для SKU программного обеспечения, раздел odm предназначен для SKU оборудования.

С выделенным продуктом и разделами ODM вы можете использовать system раздел для размещения общего кода для совместного использования многими SKU программного обеспечения, а раздел vendor для размещения специфичного для SoC кода BSP для совместного использования между несколькими устройствами на основе данной SoC.

Использование отдельных разделов имеет недостатки, такие как сложность управления дисковым пространством (например, вы должны зарезервировать ограниченный объем места для будущего роста). Однако поддержка динамических разделов в Android 10 устраняет проблему с диском и делает возможным переразбиение устройства во время обновления по беспроводной сети (OTA) .

Компоненты ODM

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

Специфичный для ODM компонент Место расположения
Загружаемые модули ядра (LKM) /odm/lib/modules/*.ko
Родные библиотеки /odm/lib[64]
HAL /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
Данные объекта VINTF /odm/etc/vintf
файлы init.rc /odm/etc/init
Свойства системы /odm/build.prop
Наложения ресурсов времени выполнения (RRO) /odm/overlay/*.apk
Программы /odm/app/*.apk
Priv-приложения /odm/priv-app/*.apk
Библиотеки Java /odm/framework/*.jar
Системные конфигурации Android Framework /odm/etc/sysconfig/* и /odm/etc/permissions/*

Нет пользовательских изображений

Не используйте пользовательские изображения, потому что они не поддерживают следующее:

  • Установка модуля на конкретную цель. Пользовательские образы поддерживают копирование артефактов в образ, но не могут установить модуль в конкретный раздел, указав целевой раздел как часть правила сборки.
  • Сун. custom_images не может быть построен с использованием системы сборки Soong.
  • OTA-обновление. Пользовательские образы используются как заводские образы ПЗУ, которые нельзя редактировать по OTA.

Поддержка ABI между разделами

Раздел odm является расширением раздела vendor . При рассмотрении стабильности двоичного интерфейса приложения (ABI) помните о следующей архитектуре.

Поддержка ABI между разделами
Рисунок 1. Поддержка ABI между разделами
  • Между разделами odm и vendor нет стабильности ABI. Оба раздела необходимо обновлять одновременно.
  • odm и vendor могут зависеть друг от друга, но раздел vendor должен работать без раздела odm .
  • ABI между odm и system такой же, как ABI между vendor и system .

Прямое взаимодействие между разделом product разделом vendor или odm запрещено . (Это обеспечивается SEpolicy.)

Реализация разделов ODM

Перед созданием нового раздела просмотрите соответствующие изменения AOSP .

Настройка разделов ODM

Чтобы настроить разделы odm , odm следующие флаги сборки:

  • BOARD_ODMIMAGE_PARTITION_SIZE для фиксированного размера раздела
  • PRODUCT_USE_DYNAMIC_PARTITIONS и BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE для размера динамического раздела
  • BOARD_ODMIMAGE_FILE_SYSTEM_TYPE файловой системы BOARD_ODMIMAGE_FILE_SYSTEM_TYPE , используемый для образа ODM
  • PRODUCT_ODM_PROPERTIES для /odm/build.prop для использования внутри $(call inherit-product path/to/device.mk) /odm/build.prop $(call inherit-product path/to/device.mk) , как в PRODUCT_ODM_PROPERTIES += product.abc=ok

Установка модуля в раздел ODM

Используйте эти флаги сборки для установки модуля в раздел odm :

  • device_specific: true в Android.bp
  • LOCAL_ODM_MODULE := true в Android.mk

Включение проверенной загрузки

Чтобы предотвратить вмешательство вредоносного ПО в разделы odm , включите Android Verified Boot (AVB) для этих разделов (так же, как вы это делаете для разделов vendor и system ).

Чтобы включить AVB, включите флаг сборки BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS . Дополнительные сведения о настройке AVB на динамических разделах см. В разделе « Изменения конфигурации AVB» .

Обработка / odm как другого раздела / vendor

Чтобы гарантировать, что система обрабатывает раздел odm как раздел vendor , замените все жестко заданные ссылки на vendor набором аппаратно-ориентированных разделов (в настоящее время odm и vendor ). Известные ссылки на vendor на платформе включают динамический компоновщик , диспетчер пакетов и shell/libc .