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) учитывайте следующую архитектуру.
Рисунок 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
.