W Androidzie 11 wprowadziliśmy ogólny obraz jądra i partycję rozruchową dostawcy. Na partycji rozruchowej dostawcy są przechowywane moduły jądra zgodne z GKI, które są ładowane przez pierwszy etap inicjalizacji. Moduły jądra systemu sprzed wersji Androida 11 są również przechowywane w partycjach dostawcy i ODM oraz są 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 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). Możesz później zaktualizować tę partycję niezależnie. Podobnie możesz przenieść wszystkie moduły jądra przechowywane w partycji ODM do nowej partycji o nazwie ODM DLKM. Ta partycja może też być aktualizowana niezależnie.
Lokalizacja partycji
Partycje vendor_dlkm
i odm_dlkm
znajdują się w superpartycji jako kolejna partycja dynamiczna.
Zawartość dostawcy Provider_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.
Wsparcie
Tworzenie partycji vendor_dlkm
i odm_dlkm
przebiega podobnie do tworzenia 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
: Zmieniaj flagi w zależności
od urządzenia. Jako przykładu użyj listy CL Dodaj vendor_dlkm
do pliku CF.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Przykład kompilacji odm_dlkm
Skompiluj odm_dlkm
w sposób pokazany 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ładu użyj listy CL Dodaj odm_dlkm
do pliku 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 ją 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 /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 wykonywana w depmod
na modułach, 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ść pola modules.load
, możesz określić ją tutaj: 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
zainstaluj BOARD_VENDOR_KERNEL_MODULES
bezpośrednio na urządzeniu /vendor/lib/modules
. To problem, ponieważ /vendor_dlkm/lib/modules
nie istnieje.
Nigdy nie używaj /odm_dlkm/lib/modules
. Na urządzeniach bez partycji odm_dlkm
instalujesz 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 stają się dostępne 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 później.
Powiązana dokumentacja
Dokumentację dotyczącą tworzenia partycji rozruchowej dostawcy (która zawiera dysk RAMDisk dostawcy) znajdziesz w dokumentacji dotyczącej obsługi modułów jądra.