В Android 10 поддерживается создание разделов odm с помощью системы сборки Android.
Разделы отслеживания на устройствах
Производители оригинальных разработок (ODM) настраивают пакеты поддержки платформы (BSP) от поставщиков систем на кристалле (SoC) для своих устройств (плат). Это позволяет им реализовывать модули ядра для компонентов, относящихся к плате, демонов, относящихся к плате, или собственных функций на аппаратно-зависимых уровнях (HAL). Они также могут заменять или настраивать компоненты SoC.
В более ранних версиях Android такие настройки не позволяли использовать одно и то же изображение поставщика для устройств с одинаковыми процессорами (или с разными, но из одного семейства). В Android 10 и более поздних версий для настроек можно использовать отдельный раздел odm, что позволяет использовать один образ поставщика для нескольких вариантов оборудования.
Как использовать разделы для продуктов и ODM
В Android 9 добавлена поддержка создания разделов product, что позволяет использовать один образ системы для нескольких SKU программного обеспечения, поставляемых разными образами product.img. Раздел product предназначен для кодов SKU программного обеспечения, а раздел odm – для кодов SKU оборудования.
Благодаря выделенным разделам product и odm вы можете использовать раздел system для размещения общего кода, который будет использоваться в разных SKU ПО, а раздел vendor – для размещения кода BSP, относящегося к SoC, который будет использоваться на разных устройствах с этой SoC.
У использования отдельных разделов есть недостатки, например сложность управления местом на диске (например, вам нужно зарезервировать ограниченный объем пространства для будущего роста). Однако поддержка динамических разделов в Android 10 устраняет проблему с диском и позволяет перераспределять разделы устройства во время беспроводного обновления.
Компоненты 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 |
| Приложения с привилегиями | /odm/priv-app/*.apk |
| Библиотеки Java | /odm/framework/*.jar |
| Системные конфигурации фреймворка Android | /odm/etc/sysconfig/* и /odm/etc/permissions/* |
Нет пользовательских образов
Не используйте специальные изображения, поскольку они не поддерживают:
- Установка модуля в определенный целевой объект. В пользовательские образы можно копировать артефакты, но нельзя установить модуль в определенный раздел, указав целевой раздел как часть правила сборки.
- Soong
custom_imagesнельзя создать с помощью системы сборки Soong. - Беспроводное обновление. Собственные образы используются в качестве образов заводской ПЗУ, которые нельзя обновить по OTA.
Поддерживать ABI между разделами
Раздел odm является расширением раздела vendor. При рассмотрении стабильности двоичного интерфейса приложения (ABI) учитывайте следующую архитектуру.
Рисунок 1. Поддержание ABI между разделами.
- Между разделами
odmиvendorнет стабильности ABI. Оба раздела должны быть обновлены одновременно. - Разделы
odmиvendorмогут зависеть друг от друга, но разделvendorдолжен работать без разделаodm. - ABI между
odmиsystemтакой же, как и междуvendorиsystem.
Прямое взаимодействие между разделом product и разделом vendor или odm запрещено. (Это обеспечивается политикой SEpolicy.)
Как реализовать разделы для отслеживания конверсий на устройствах
Перед тем как реализовать новый раздел, ознакомьтесь с соответствующими изменениями в 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 (AVB) (как для разделов vendor и system).
Чтобы включить AVB, добавьте флаг сборки BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS. Подробнее о том, как настроить AVB в динамических разделах, рассказывается в статье Изменения в конфигурации AVB.
Раздел /odm обрабатывается так же, как и раздел /vendor.
Чтобы система обрабатывала раздел odm как раздел vendor, замените все заданные в коде ссылки на vendor набором разделов, ориентированных на аппаратное обеспечение (в настоящее время odm и vendor). К заметным местам ссылок на vendor на платформе относятся динамический компоновщик, менеджер пакетов и shell/libc.