Partycje dostawcy i ODM DLKM

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

Dokumentację dotyczącą tworzenia partycji rozruchowej dostawcy (która zawiera dysk RAMDisk dostawcy) znajdziesz w dokumentacji dotyczącej obsługi modułów jądra.