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
.