Partycje DLKM dostawcy i ODM

Android 11 wprowadza koncepcję ogólnego obrazu jądra i partycji rozruchowej dostawcy. Partycja rozruchowa dostawcy przechowuje moduły jądra zgodne z GKI i jest ładowana przez inicjowanie pierwszego etapu. Moduły jądra sprzed Androida 11 są też przechowywane w partycjach dostawcy i ODM oraz wczytywane przez procesy dostawcy.

W przypadku Androida 11 lub nowszego jądro i wszystkie moduły jądra można aktualizować niezależnie od pozostałych partycji. Aby włączyć aktualizacje modułów jądra przechowywanych w partycji dostawcy (bez aktualizacji partycji dostawcy), przenieś wszystkie moduły partycji dostawcy do nowej partycji o nazwie Vendor DLKM (dynamicznie ładowany moduł jądra). Możesz wtedy niezależnie zaktualizować tę partycję. Podobnie możesz przenieść wszystkie moduły jądra przechowywane w partycji ODM do nowej partycji o nazwie ODM DLKM. Tę partycję można też aktualizować niezależnie.

Lokalizacja partycji

Partycje vendor_dlkmodm_dlkm znajdują się w superpartycji jako kolejne partycje dynamiczne.

zawartość vendor_dlkm w /vendor/lib/modules

  • Moduły jądra dostawcy
  • modprobe plików konfiguracyjnych
  • modules.load plik

zawartość odm_dlkm w katalogu /odm/lib/modules

  • Moduły jądra ODM
  • modprobe plików konfiguracyjnych
  • modules.load plik

Więcej informacji o plikach konfiguracyjnych modułów jądra znajdziesz w sekcji Obsługa modułów jądra.

Pomoc dotycząca kompilacji

Tworzenie partycji vendor_dlkmodm_dlkm przebiega podobnie jak tworzenie innych partycji dynamicznych.

vendor_dlkm – przykład kompilacji

Utwórz vendor_dlkm zgodnie z przykładami poniżej.

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

Zastąp <GROUP_NAME> odpowiednią nazwą grupy aktualizacji. Grupa aktualizacji powinna być grupą, w której znajduje się partycja dostawcy.

W przypadku urządzeń z testem A/B i wirtualnym testem A/B: device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

Dodaj do pliku fstab ten wpis dla vendor_dlkm: Zmień flagi zgodnie z urządzeniem. Użyj jako przykładu warunku CL Add vendor_dlkm to CF.

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

Przykład kompilacji odm_dlkm

Utwórz odm_dlkm zgodnie z przykładami poniżej.

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

W przypadku urządzeń z testem A/B i wirtualnym testem A/B:device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

Dodaj do pliku fstab ten wpis dla odm_dlkm: Zmień flagi zgodnie z urządzeniem. Użyj jako przykładu warunku CL Add odm_dlkm to CF.

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

Kopiowanie modułów jądra na partycję

Aby wybrać moduły jądra, które chcesz skopiować do partycji vendor_dlkm, wymień je w BOARD_VENDOR_KERNEL_MODULES.

Jeśli chcesz zastąpić zawartość modules.load, możesz ją określić w BOARD_VENDOR_KERNEL_MODULES_LOAD.

Podczas kompilacji moduły wymienione w BOARD_VENDOR_KERNEL_MODULES są instalowane w $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules. W lokalizacji /vendor/lib/modules tworzone jest dowiązanie symboliczne, które prowadzi do /vendor_dlkm/lib/modules.

Podobnie, aby wybrać moduły jądra, które chcesz skopiować do partycji odm_dlkm, wymień je w BOARD_ODM_KERNEL_MODULES. Proces kompilacji platformy depmod jest uruchamiany na modułach i kopiuje depmod pliki wyjściowe do obrazu. Proces kompilacji tworzy plik modules.load i zapisuje go w obrazie. Ten plik zawiera wszystkie moduły wymienione w BOARD_ODM_KERNEL_MODULES.

Jeśli chcesz zastąpić zawartość modules.load, możesz ją określić w BOARD_ODM_KERNEL_MODULES_LOAD.

Podczas kompilacji moduły wymienione w BOARD_ODM_KERNEL_MODULES są instalowane w $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules. W lokalizacji /odm/lib/modules utworzono dowiązanie symboliczne, które prowadzi do /odm_dlkm/lib/modules.

Zawsze używaj /vendor/lib/modules/odm/lib/modules w przypadku modułów jądra dostawcy i ODM.

Nigdy nie używaj /vendor_dlkm/lib/modules. Urządzenia bez partycji vendor_dlkm instalują BOARD_VENDOR_KERNEL_MODULES bezpośrednio w /vendor/lib/modules. Jest to problematyczne, ponieważ /vendor_dlkm/lib/modules nie istnieje.

Nigdy nie używaj /odm_dlkm/lib/modules. Urządzenia bez partycji odm_dlkm instalują BOARD_ODM_KERNEL_MODULES bezpośrednio w /odm/lib/modules. Jest to problematyczne, ponieważ /odm_dlkm/lib/modules nie istnieje.

Montaż partycji i ładowanie modułu

Podczas first_stage_init partycje vendor_dlkmodm_dlkm są montowane odpowiednio w katalogach /vendor_dlkm/odm_dlkm. Gdy to nastąpi, dowiązania symboliczne w lokalizacjach /vendor/lib/modules/odm/lib/modules staną się dostępne.

Proces dostawcy (np. .rc skrypt) może następnie wczytać moduły jądra na podstawie kolejności określonej w modules.load. Proces dostawcy może też wczytać moduły w późniejszym czasie, jeśli będzie to konieczne.

Dokumentację dotyczącą tworzenia partycji vendor-boot (zawierającej dysk RAM dostawcy) znajdziesz w sekcji Obsługa modułu jądra.