Android 10 включает поддержку создания разделов odm с использованием системы сборки Android.
О разделах ODM
Производители оригинального дизайна (ODM) настраивают пакеты поддержки плат поставщиков систем на кристалле (SoC) (BSP) для своих конкретных устройств (своих плат). Это позволяет им реализовывать модули ядра для компонентов, специфичных для платы, демонов, специфичных для платы, или собственных функций на уровнях аппаратной абстракции (HAL). Они также могут захотеть заменить или настроить компоненты SoC.
В более ранних версиях Android такие настройки не позволяли использовать образ одного поставщика для устройств с одной и той же SoC (или с разными SoC, но в одном семействе). В Android 10 и более поздних версиях вы можете использовать отдельный раздел odm для настроек, что позволяет использовать образ одного поставщика для нескольких аппаратных SKU.
Использование разделов продукта и ODM
В Android 9 добавлена поддержка создания разделов product , что позволяет использовать один образ системы для нескольких SKU программного обеспечения, предоставляемых разными образами product.img . В то время как раздел product предназначен для SKU программного обеспечения, раздел odm предназначен для SKU оборудования.
С выделенными разделами продукта и ODM вы можете использовать system раздел для размещения общего кода для совместного использования многими SKU программного обеспечения, а раздел 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 |
| SEPolicy | /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 между разделами
odmиvendor. Оба раздела должны быть обновлены одновременно. -
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 .