Moduł GKI i moduły GKI można aktualizować niezależnie od reszty partycji, ponieważ moduły GKI znajdują się w oddzielnej dynamicznej partycji w super obrazie o nazwie 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. aby moduły zostały załadowane
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ł jądra podpisany przez Google w czasie kompilacji
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:
W pliku
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
Na liście partycji dodaj
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(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
Określ moduły jądra do skopiowania do 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 systemu
docelową architekturę i udostępnić ją jako źródło partycji system_dlkm
.
podczas budowania platformy.
Android 13
Wskazywanie BOARD_SYSTEM_DLKM_SRC
do folderu zawierającego wymagane pliki obiektów jądra GKI dla urządzenia jako dane wejściowe dla systemu kompilacji w celu wygenerowania partycji system_dlkm
. Na przykład:
Podaj źródło modułów GKI w folderze i wskaż BOARD_SYSTEM_DLKM_SRC
do tego folderu. Na przykład:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
W momencie kompilacji moduły wymienione w sekcji BOARD_SYSTEM_DLKM_SRC
są instalowane w
$ANDROID_PRODUCT_OUT/system_dlkm
Android 14
Uprościliśmy implementację za pomocą makr (BOARD_*_KERNEL_MODULES
) używanych w przypadku innych partycji (*_dlkm
). Lista wymaganych modułów GKI dla urządzenia powinna być wywoływana za pomocą makra BOARD_SYSTEM_KERNEL_MODULES
. W momencie kompilacji te moduły są instalowane 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 wczytuje się moduł dostawcy, wszystkie wymagane moduły GKI są wczytywane 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. Po pomyślnym zamontowaniu dostępne są linki symboliczne w /system/lib/modules
, które wskazują na /system_dlkm/lib/modules
.
Proces dostawcy, np. skrypt .rc
, może następnie wczytywać 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 usługa dlkm_loader
używana przez Cuttlefish do wczytywania modułów GKI ma te uprawnienia w pliku zasad w folderze 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