Partycja dostawcy/ODM DLKM

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.

Aby zapoznać się z dokumentacją dotyczącą tworzenia partycji rozruchowej dostawcy (która zawiera RAMDisk dostawcy), zobacz Wsparcie modułu jądra .