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_dlkm
i odm_dlkm
znajdują się w superpartycji jako kolejne partycje dynamiczne.
zawartość vendor_dlkm w /vendor/lib/modules
- Moduły jądra dostawcy
modprobe
plików konfiguracyjnychmodules.load
plik
zawartość odm_dlkm w katalogu /odm/lib/modules
- Moduły jądra ODM
modprobe
plików konfiguracyjnychmodules.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_dlkm
i odm_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
i /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_dlkm
i odm_dlkm
są montowane odpowiednio w katalogach /vendor_dlkm
i /odm_dlkm
. Gdy to nastąpi, dowiązania symboliczne w lokalizacjach /vendor/lib/modules
i /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.
Powiązana dokumentacja
Dokumentację dotyczącą tworzenia partycji vendor-boot (zawierającej dysk RAM dostawcy) znajdziesz w sekcji Obsługa modułu jądra.