ODM-разделы

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

О разделах ODM

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

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

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

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

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

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

ODM-компоненты

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

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

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

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

  • Установка модуля на конкретную цель. Пользовательские образы поддерживают копирование артефактов в образ, но не могут установить модуль в определенный раздел, указав целевой раздел как часть правила сборки.
  • Сунг. custom_images невозможно собрать с помощью системы сборки Soong.
  • ОТА-обновление. Пользовательские образы используются в качестве заводских образов ПЗУ, которые нельзя редактировать 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 , включите следующие флаги сборки:

  • BOARD_ODMIMAGE_PARTITION_SIZE для фиксированного размера раздела
  • PRODUCT_USE_DYNAMIC_PARTITIONS и BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE для динамического размера раздела
  • BOARD_ODMIMAGE_FILE_SYSTEM_TYPE тип файловой системы, используемый для образа ODM
  • PRODUCT_ODM_PROPERTIES для /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 .