В Android 11 представлена концепция образа ядра Generic Kernel Image и загрузочного раздела поставщика. Загрузочный раздел поставщика хранит модули ядра, совместимые с GKI, и загружается на первом этапе инициализации. Модули ядра, выпущенные до Android 11, также хранятся в разделах поставщика и ODM и загружаются процессами поставщика.
В Android 11 и выше ядро и все модули ядра можно обновлять независимо от остальных разделов. Чтобы включить обновления модулей ядра, хранящихся в разделе поставщика (без обновления раздела поставщика), переместите все модули раздела поставщика в новый раздел с названием Vendor DLKM (динамически загружаемый модуль ядра). Затем вы можете обновить этот раздел независимо. Аналогичным образом, вы можете переместить все модули ядра, хранящиеся в разделе ODM, в новый раздел с названием ODM DLKM . Этот раздел также можно обновлять независимо.
Расположение раздела
Разделы vendor_dlkm
и odm_dlkm
расположены в суперразделе как еще один динамический раздел.
содержимое vendor_dlkm в /vendor/lib/modules
- Модули ядра поставщика
- файлы конфигурации
modprobe
- Файл
modules.load
содержимое odm_dlkm в /odm/lib/modules
- Модули ядра ODM
- файлы конфигурации
modprobe
- Файл
modules.load
Дополнительную информацию о файлах конфигурации модулей ядра см. в разделе Поддержка модулей ядра.
Поддержка сборки
Создание vendor_dlkm
и odm_dlkm
аналогично созданию других динамических разделов.
пример сборки vendor_dlkm
Создайте vendor_dlkm
, как показано в следующих примерах.
BoardConfig.mk
BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm
Замените <GROUP_NAME>
соответствующим именем группы обновлений. Группа обновлений должна совпадать с группой, в которой находится раздел поставщика.
Для устройств A/B и виртуальных устройств A/B, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Добавьте следующую запись для vendor_dlkm
в fstab. Измените флаги в соответствии с устройством. Используйте CL Add vendor_dlkm
to CF в качестве примера.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
пример сборки odm_dlkm
Соберите odm_dlkm
, как показано в следующих примерах.
BoardConfig.mk
BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm
Для устройств A/B и виртуальных устройств A/B, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Добавьте следующую запись для odm_dlkm
в fstab. Измените флаги в соответствии с устройством. Используйте CL Add odm_dlkm
to CF в качестве примера.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Копировать модули ядра в раздел
Чтобы выбрать модули ядра, которые вы хотите скопировать в раздел vendor_dlkm
, перечислите их в BOARD_VENDOR_KERNEL_MODULES
.
Если вы хотите переопределить содержимое modules.load
, вы можете указать это в BOARD_VENDOR_KERNEL_MODULES_LOAD
.
Во время сборки модули, перечисленные в BOARD_VENDOR_KERNEL_MODULES
, устанавливаются в $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. В каталоге /vendor/lib/modules
создаётся символическая ссылка, ведущая к /vendor_dlkm/lib/modules
.
Аналогично, чтобы выбрать модули ядра, которые нужно скопировать в раздел odm_dlkm
, перечислите их в BOARD_ODM_KERNEL_MODULES
. Сборка платформы запускает depmod
для модулей и копирует выходные файлы depmod
в образ. Сборка создает файл modules.load
и сохраняет его в образе. Этот файл содержит все модули, перечисленные в BOARD_ODM_KERNEL_MODULES
.
Если вы хотите переопределить содержимое modules.load
, вы можете указать это в BOARD_ODM_KERNEL_MODULES_LOAD
.
Во время сборки модули, перечисленные в BOARD_ODM_KERNEL_MODULES
, устанавливаются в $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. В каталоге /odm/lib/modules
создаётся символическая ссылка, ведущая к /odm_dlkm/lib/modules
.
Всегда используйте /vendor/lib/modules
и /odm/lib/modules
для модулей ядра поставщика и ODM.
Никогда не используйте /vendor_dlkm/lib/modules. Устройства без раздела vendor_dlkm
устанавливают BOARD_VENDOR_KERNEL_MODULES
напрямую в /vendor/lib/modules
. Это проблематично, поскольку /vendor_dlkm/lib/modules
не существует.
Никогда не используйте /odm_dlkm/lib/modules
. Устройства без раздела odm_dlkm
устанавливают BOARD_ODM_KERNEL_MODULES
напрямую в /odm/lib/modules
. Это проблематично, поскольку /odm_dlkm/lib/modules
не существует.
Монтаж перегородок и загрузка модулей
На first_stage_init
разделы vendor_dlkm
и odm_dlkm
монтируются в каталоги /vendor_dlkm
и /odm_dlkm
соответственно. После этого становятся доступны символические ссылки на /vendor/lib/modules
и /odm/lib/modules
.
Процесс поставщика (например, скрипт .rc
) может затем загрузить модули ядра в порядке, указанном в modules.load
. При необходимости процесс поставщика может также загрузить модули позднее.
Сопутствующая документация
Документацию по созданию раздела загрузки поставщика (содержащего RAMDisk поставщика) см. в разделе Поддержка модулей ядра .