W systemie Android 11 wprowadzono koncepcję ogólnego obrazu jądra i partycji rozruchowej dostawcy. Partycja rozruchowa dostawcy przechowuje moduły jądra kompatybilne z GKI i jest ładowana przez inicjację pierwszego etapu. Moduły jądra przed wydaniem Androida 11 są również przechowywane w partycjach dostawcy i ODM i są ł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 włączyć aktualizacje modułów jądra przechowywanych na partycji dostawcy (bez aktualizacji partycji dostawcy), przenieś wszystkie moduły partycji dostawcy na nową partycję o nazwie Vendor DLKM (dynamicznie ładowany moduł jądra). Następnie możesz niezależnie zaktualizować tę partycję. Podobnie możesz przenieść wszystkie moduły jądra przechowywane na partycji ODM na nową partycję o nazwie ODM DLKM . Tę partycję można również aktualizować niezależnie.
Lokalizacja partycji
Partycje vendor_dlkm
i odm_dlkm
znajdują się w super partycji jako kolejna partycja dynamiczna.
zawartość dostawcy_dlkm w /vendor/lib/modules
- Moduły jądra dostawcy
- pliki konfiguracyjne
modprobe
- Plik
modules.load
zawartość odm_dlkm w /odm/lib/modules
- Moduły jądra ODM
- pliki konfiguracyjne
modprobe
- Plik
modules.load
Więcej informacji na temat plików konfiguracyjnych modułu jądra można znaleźć w sekcji Obsługa modułów jądra.
Buduj wsparcie
Budowanie vendor_dlkm
i odm_dlkm
jest procesem podobnym do budowania innych partycji dynamicznych.
przykład kompilacji dostawcy_dlkm
Zbuduj vendor_dlkm
, jak pokazano w poniższym przykładzie.
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 A/B, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Dodaj następujący wpis dla vendor_dlkm
do fstab. Zmień flagi w zależności od urządzenia. Jako przykład użyj polecenia CL Dodaj vendor_dlkm
do CF.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
przykład kompilacji odm_dlkm
Zbuduj odm_dlkm
, jak pokazano w przykładzie 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ń A/B i wirtualnych A/B, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Dodaj następujący wpis dla odm_dlkm
do fstab. Zmień flagi w zależności od urządzenia. Jako przykład użyj 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
, wypisz je w BOARD_VENDOR_KERNEL_MODULES
.
Jeśli chcesz zastąpić zawartość modules.load
, możesz to określić w BOARD_VENDOR_KERNEL_MODULES_LOAD
.
W czasie kompilacji moduły wymienione w BOARD_VENDOR_KERNEL_MODULES
są instalowane w $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. W /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ć na partycję odm_dlkm
, wypisz je w BOARD_ODM_KERNEL_MODULES
. Kompilacja platformy uruchamia depmod
na modułach i kopiuje pliki wyjściowe depmod
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ść modules.load
, możesz to określić w BOARD_ODM_KERNEL_MODULES_LOAD
.
W czasie kompilacji moduły wymienione w BOARD_ODM_KERNEL_MODULES
zostaną zainstalowane w $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. W /odm/lib/modules
zostanie utworzone dowiązanie symboliczne prowadzące do /odm_dlkm/lib/modules
.
Zawsze używaj /vendor/lib/modules
i /odm/lib/modules
dla 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łów
Podczas first_stage_init
partycje vendor_dlkm
i odm_dlkm
są montowane odpowiednio w partycjach /vendor_dlkm
i /odm_dlkm
. Gdy tak się stanie, stają się dostępne dowiązania symboliczne w /vendor/lib/modules
i /odm/lib/modules
.
Proces dostawcy (jak skrypt „.rc”) może następnie załadować moduły jądra w oparciu o kolejność określoną w modules.load
. Jeśli zajdzie taka potrzeba, proces dostawcy może również załadować moduły później.
Powiązana dokumentacja
Aby zapoznać się z dokumentacją dotyczącą tworzenia partycji rozruchowej dostawcy (która zawiera RAMDisk dostawcy), zobacz Wsparcie modułu jądra .