Partycje DLKM dostawcy i ODM

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_dlkmodm_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/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_dlkmodm_dlkm są montowane odpowiednio w katalogach /vendor_dlkm/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.

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.