Android 11 wprowadza pojęcie ogólnego obrazu jądra i partycji rozruchowej dostawcy. Na partycji rozruchowej dostawcy są przechowywane moduły jądra zgodne z GKI, które są ładowane przez pierwszy etap inicjalizacji. Moduł Kernela przed wydaniem Androida 11 są również przechowywane w partycjach dostawcy i ODM oraz ładowane 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 umożliwić 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 wczytywalny moduł jądra). Następnie możesz zaktualizować tę partycję niezależnie. Podobnie możesz przenieść wszystkie moduły jądra przechowywane na partycji ODM do nowej partycji o nazwie ODM DLKM. Ta partycja może być również aktualizowana niezależnie.
Lokalizacja partycji
Partycje vendor_dlkm
i odm_dlkm
znajdują się w superpartycji jako kolejna partycja dynamiczna.
zawartość vendor_dlkm w katalogu /vendor/lib/modules
- Moduł dostawcy jądra
modprobe
plików konfiguracyjnych- Plik
modules.load
zawartość odm_dlkm w katalogu /odm/lib/modules
- Moduły jądra ODM
modprobe
plików konfiguracyjnych- Plik
modules.load
Więcej informacji o plikach konfiguracyjnych modułu jądra znajdziesz w dokumentacji dotyczącej modułów jądra.
Pomoc w budowaniu
Tworzenie vendor_dlkm
i odm_dlkm
przebiega podobnie jak tworzenie innych partycji dynamicznych.
Przykład kompilacji vendor_dlkm
Utwórz vendor_dlkm
, jak pokazano w poniższych przykładach.
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ń A/B i wirtualnych urządzeń A/B: device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Dodaj do pliku fstab ten wpis dotyczący vendor_dlkm
: Zmień flagi zgodnie z urządzeniem. Jako przykład użyj polecenia 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
, jak pokazano w poniższych przykładach.
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ń A/B i wirtualnych urządzeń A/B:device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Dodaj do pliku fstab ten wpis dotyczący odm_dlkm
: Zmień flagi zgodnie z urządzeniem. Jako przykład użyj polecenia 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ć na partycję vendor_dlkm
, wypisz je w pliku BOARD_VENDOR_KERNEL_MODULES
.
Jeśli chcesz zastąpić zawartość parametru modules.load
, możesz go określić w parametrze BOARD_VENDOR_KERNEL_MODULES_LOAD
.
W momencie kompilacji moduły wymienione w BOARD_VENDOR_KERNEL_MODULES
są instalowane w $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. W miejscu /vendor/lib/modules
tworzone jest symboliczne połączenie prowadzące do miejsca /vendor_dlkm/lib/modules
.
Aby wybrać moduły jądra, które chcesz skopiować do partycji odm_dlkm
, utwórz ich listę w pliku BOARD_ODM_KERNEL_MODULES
. Kompilacja platformy jest uruchamiana na modulech depmod
, a pliki wyjściowe depmod
są kopiowane do obrazu.
Kompilacja 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ść parametru modules.load
, możesz go określić w parametrze BOARD_ODM_KERNEL_MODULES_LOAD
.
W momencie kompilacji moduły wymienione w BOARD_ODM_KERNEL_MODULES
są instalowane w $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. W miejscu /odm/lib/modules
zostanie utworzone dowiązanie symboliczne prowadzące do /odm_dlkm/lib/modules
.
Zawsze używaj wartości /vendor/lib/modules
i /odm/lib/modules
w przypadku modułów jądra dostawcy i ODM.
Nigdy nie używaj katalogu /vendor_dlkm/lib/modules. Na urządzeniach bez partycji vendor_dlkm
BOARD_VENDOR_KERNEL_MODULES
jest instalowany bezpośrednio na /vendor/lib/modules
. To powoduje problem, 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 na /odm/lib/modules
. To jest problem, ponieważ /odm_dlkm/lib/modules
nie istnieje.
Montowanie partycji i wczytywanie modułów
Podczas first_stage_init
partycje vendor_dlkm
i odm_dlkm
są montowane odpowiednio w katalogach /vendor_dlkm
i /odm_dlkm
. Wtedy dostępne są symboliczne linki /vendor/lib/modules
i /odm/lib/modules
.
Proces dostawcy (np. skrypt .rc
) może następnie wczytywać moduły jądra zgodnie z kolejnością określoną w pliku modules.load
. W razie potrzeby proces dostawcy może też wczytać moduły w późniejszym czasie.
Powiązana dokumentacja
Dokumentację dotyczącą tworzenia partycji rozruchowej dostawcy (która zawiera dysk RAM dysku dostawcy) znajdziesz w dokumentacji dotyczącej obsługi modułów jądra.