Anbieter/ODM-DLKM-Partition

Android 11 führt das Konzept des generischen Kernel-Images und der Hersteller-Boot-Partition ein. Die Hersteller-Boot-Partition speichert mit GKI kompatible Kernel-Module und wird von der ersten Init-Stufe geladen. Kernelmodule vor der Veröffentlichung von Android 11 werden ebenfalls in Hersteller- und ODM-Partitionen gespeichert und von Herstellerprozessen geladen.

Für Android 11 oder höher können der Kernel und alle Kernelmodule unabhängig von den übrigen Partitionen aktualisiert werden. Um Aktualisierungen für Kernelmodule zu ermöglichen, die in der Herstellerpartition gespeichert sind (ohne Aktualisierung der Herstellerpartition), verschieben Sie alle Anbieterpartitionsmodule in eine neue Partition namens Vendor DLKM (dynamisch ladbares Kernelmodul). Sie können diese Partition dann unabhängig aktualisieren. Ebenso können Sie alle in der ODM-Partition gespeicherten Kernelmodule in eine neue Partition namens ODM DLKM verschieben. Diese Partition kann auch unabhängig aktualisiert werden.

Partitionsspeicherort

Die Partitionen vendor_dlkm und odm_dlkm befinden sich in der Superpartition als weitere dynamische Partition.

Vendor_dlkm-Inhalte in /vendor/lib/modules

  • Kernelmodule des Anbieters
  • modprobe Konfigurationsdateien
  • Eine modules.load Datei

odm_dlkm-Inhalt in /odm/lib/modules

  • ODM-Kernelmodule
  • modprobe Konfigurationsdateien
  • Eine modules.load Datei

Weitere Informationen zu Kernelmodul-Konfigurationsdateien finden Sie unter Kernelmodulunterstützung .

Unterstützung aufbauen

Das Erstellen vendor_dlkm und odm_dlkm ist ein ähnlicher Prozess wie das Erstellen anderer dynamischer Partitionen.

build-Beispiel „vendor_dlkm“.

Erstellen Sie vendor_dlkm wie im folgenden Beispiel gezeigt.

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

Ersetzen Sie <GROUP_NAME> durch den entsprechenden Namen der Update-Gruppe. Die Update-Gruppe sollte die Gruppe sein, in der sich die Herstellerpartition befindet.

Für A/B- und Virtual A/B-Geräte: device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

Fügen Sie den folgenden Eintrag für vendor_dlkm zur fstab hinzu. Ändern Sie die Flags je nach Gerät. Verwenden Sie als Beispiel die CL vendor_dlkm zu CF hinzufügen“ .

vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

odm_dlkm-Build-Beispiel

Erstellen Sie odm_dlkm wie im folgenden Beispiel gezeigt.

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

Für A/B- und Virtual A/B-Geräte: device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

Fügen Sie den folgenden Eintrag für odm_dlkm zur fstab hinzu. Ändern Sie die Flags je nach Gerät. Verwenden Sie als Beispiel die CL odm_dlkm zu CF hinzufügen“ .

odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

Kopieren von Kernelmodulen in eine Partition

Um die Kernelmodule auszuwählen, die Sie in die vendor_dlkm Partition kopieren möchten, listen Sie sie in BOARD_VENDOR_KERNEL_MODULES auf.

Wenn Sie den Inhalt von modules.load überschreiben möchten, können Sie ihn in BOARD_VENDOR_KERNEL_MODULES_LOAD angeben.

Zur Erstellungszeit werden die in BOARD_VENDOR_KERNEL_MODULES aufgeführten Module in $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules installiert. Unter /vendor/lib/modules wird ein symbolischer Link erstellt, der zu /vendor_dlkm/lib/modules führt.

Um die Kernelmodule auszuwählen, die Sie in die Partition odm_dlkm kopieren möchten, listen Sie sie ebenfalls in BOARD_ODM_KERNEL_MODULES auf. Der Plattform-Build führt depmod auf den Modulen aus und kopiert die depmod Ausgabedateien in das Image. Der Build erstellt eine Datei modules.load und speichert sie im Image. Diese Datei enthält alle in BOARD_ODM_KERNEL_MODULES aufgeführten Module.

Wenn Sie den Inhalt von modules.load überschreiben möchten, können Sie ihn in BOARD_ODM_KERNEL_MODULES_LOAD angeben.

Zur Erstellungszeit werden die in BOARD_ODM_KERNEL_MODULES aufgeführten Module in $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules installiert. Unter /odm/lib/modules wird ein symbolischer Link erstellt, der zu /odm_dlkm/lib/modules führt.

Verwenden Sie immer /vendor/lib/modules und /odm/lib/modules für Vendor- und ODM-Kernelmodule.

Verwenden Sie niemals /vendor_dlkm/lib/modules. Geräte ohne vendor_dlkm Partition installieren BOARD_VENDOR_KERNEL_MODULES direkt in /vendor/lib/modules . Dies ist problematisch, da /vendor_dlkm/lib/modules nicht existiert.

Verwenden Sie niemals /odm_dlkm/lib/modules. Geräte ohne odm_dlkm Partition installieren BOARD_ODM_KERNEL_MODULES direkt in /odm/lib/modules . Dies ist problematisch, da /odm_dlkm/lib/modules nicht existiert.

Partitionsmontage und Modulladen

Während first_stage_init werden die Partitionen vendor_dlkm und odm_dlkm in den Partitionen /vendor_dlkm bzw. /odm_dlkm gemountet. In diesem Fall werden symbolische Links unter /vendor/lib/modules und /odm/lib/modules verfügbar.

Ein Anbieterprozess (wie ein „.rc“-Skript) kann dann die Kernelmodule basierend auf der in modules.load angegebenen Reihenfolge laden. Der Vendor-Prozess kann die Module bei Bedarf auch zu einem späteren Zeitpunkt laden.

Eine Dokumentation zur Erstellung einer Vendor-Boot-Partition (die die Vendor-RAMDisk enthält) finden Sie unter Kernel Module Support .