Wdrażanie partycji modułu GKI

Moduły GKI i GKI mogą być aktualizowane niezależnie od pozostałej części partycji. bo moduły GKI znajdują się na osobnej, dynamicznej partycji na superobrazie. pod tytułem system_dlkm. Moduły GKI są podpisane przez Google za pomocą jądra. i są zgodne tylko z GKI, z którymi zostały utworzone. Nie ma stabilności ABI między modułami GKI i GKI. ładowanie modułów w czasie działania modułów GKI i GKI muszą być kompilowane i aktualizowane. razem.

Wdróż obsługę partycji system_dklm

Partycja system_dlkm znajduje się w superpartycji jako inna dynamiczna partycji danych. Ta partycja może zawierać:

  • Moduły jądra podpisane w czasie kompilacji przez Google
  • depmod artefaktu

Kompilacja system_dlkm

Budynek system_dlkm przebiega podobnie do tworzenia innych elementów dynamicznych partycji. Aby dodać system_dlkm do kompilacji, wykonaj te czynności:

  1. W BoardConfig.mk dodaj te wpisy:

    BOARD_USES_SYSTEM_DLKMIMAGE := true
    BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)
    TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
    
  2. Na liście partycji dodaj system_dlkm: BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (Opcjonalnie) W przypadku urządzeń A/B i wirtualnych A/B dodaj w device.mk plik na Twoje urządzenie:

    AB_OTA_PARTITIONS += system_dlkm
    

Zidentyfikuj moduły jądra do skopiowania do usługi system_dlkm

Aby moduły ładowały się w czasie działania, muszą być skompilowane moduły GKI i GKI razem. W związku z tym w kompilacji GKI musisz zidentyfikować moduły jądra docelową architekturę i udostępnić ją jako źródło partycji system_dlkm. podczas tworzenia platformy.

Android 13

Wskaż BOARD_SYSTEM_DLKM_SRC folder zawierający wymagane moduły GKI. plików obiektu jądra dla urządzenia jako danych wejściowych do systemu kompilacji, które mają zostać partycji system_dlkm. Na przykład:

Podaj źródło modułów GKI w folderze i wskaż BOARD_SYSTEM_DLKM_SRC ten folder. Na przykład:

  BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging

W momencie kompilacji moduły wymienione w regionie BOARD_SYSTEM_DLKM_SRC są instalowane w $ANDROID_PRODUCT_OUT/system_dlkm

Android 14

Uprościliśmy implementację za pomocą makr, (BOARD_*_KERNEL_MODULES) jest używane do innych celów Liczba partycji: *_dlkm. Lista wymaganych modułów GKI przez urządzenie powinna mieć , do których odwołuje się makro BOARD_SYSTEM_KERNEL_MODULES. W momencie utworzenia te moduły są zainstalowane w: $ANDROID_PRODUCT_OUT/system_dlkm. Dowolny moduł w języku: Partycja vendor_dlkm, która ma zależności od modułów w: system_dlkm partycja generuje w pliku modules.dep prawidłowe odwołania dla vendor_dlkm partycja. Ze względu na zależności między partycjami reprezentowane przez modules.dep, gdy modułu dostawcy, każdy wymagany moduł GKI zostanie wczytany automatycznie.

Na przykład: aby zainstalować wszystkie moduły GKI na partycji system_dlkm dla GKI Jądro arm64 5.15 z gotowych wersji:

 BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)

Podłącz system_dlkm w czasie działania

W zależności od używanego systemu plików jako systemu plików tylko do odczytu dodaj Wykonaj te czynności w fstab, aby podłączyć partycję system_dlkm w czasie działania:

ext4 jako system plików tylko do odczytu

  system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

erofs jako system plików tylko do odczytu

  system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb

Mocowanie partycji i wczytywanie modułów

W czasie first_stage_init partycja system_dlkm jest podłączona w interfejsie /system_dlkm jako system plików tylko do odczytu. Przy udanym podłączeniu ciąg linki w domenie /system/lib/modules wskazujące na /system_dlkm/lib/modules są i dostępności informacji.

Proces dostawcy, np. skrypt .rc, może następnie wczytać moduły jądra. na podstawie kolejności określonej w modules.load. Proces dostawcy musi wykorzystywać użyj łącza symbolicznego /system/lib/modules, aby wczytać moduły. W razie potrzeby proces dostawcy może też załadować moduły w późniejszym czasie.

SELinux

Każdy plik w partycji system_dlkm ma etykietę z kontekstem pliku system_dlkm_file Aby wczytać plik modułów GKI w partycji system_dlkm: proces dostawcy odpowiedzialny za wczytanie modułów wymaga tagu sepolicy w w domenie dostawcy.

Na przykład mątwy dlkm_loader używany przez mątwy do wczytywania modułów GKI ma tag te uprawnienia w pliku zasad pod adresem shared/sepolicy/vendor/dlkm_loader.te:

allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;

Zweryfikuj partycję system-dlkm

Google udostępnia przypadek testowy GKI VTS do zweryfikowania partycji system_dlkm. Do ręcznie wywołaj test, użyj tego polecenia atest:

  atest -c vts_dlkm_partition_test