GKI ve GKI modülleri, bölümün geri kalanından bağımsız olarak güncellenebilir. Bunun nedeni, GKI modüllerinin süper görüntüdeki system_dlkm adlı ayrı bir dinamik bölümde bulunmasıdır. GKI modülleri, Google tarafından çekirdek derleme zamanı anahtar çifti kullanılarak imzalanır ve yalnızca oluşturuldukları GKI ile uyumludur.
GKI ile GKI modülleri arasında ABI kararlılığı yoktur. Modüllerin çalışma zamanında doğru şekilde yüklenmesi için GKI ve GKI modüllerinin birlikte oluşturulup güncellenmesi gerekir.
system_dklm bölüm desteğini uygulama
system_dlkm bölümü, süper bölüm içinde başka bir dinamik bölüm olarak yer alır. Bu bölüm şunları içerebilir:
- Google'ın derleme zamanında imzalanmış çekirdek modülleri
depmodyapı
Derleme: system_dlkm
system_dlkm oluşturma, diğer dinamik bölümleri oluşturmaya benzer bir süreçtir. Derlemenize system_dlkm eklemek için aşağıdaki adımları uygulayın:
BoardConfig.mkbölümüne aşağıdaki girişleri ekleyin:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkmBölüm listesine
system_dlkmekleyin:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm(İsteğe bağlı) A/B ve sanal A/B cihazlar için cihazınızın
device.mkdosyasına aşağıdaki satırı ekleyin:AB_OTA_PARTITIONS += system_dlkm
system_dlkm içine kopyalanacak çekirdek modüllerini belirleyin
Modüllerin çalışma zamanında başarıyla yüklenmesi için GKI ve GKI modüllerinin birlikte oluşturulması gerekir. Bu nedenle, hedef mimari için GKI derlemesindeki çekirdek modüllerini tanımlamanız ve bunu platform derlemesi sırasında system_dlkm bölümünün kaynağı olarak sağlamanız gerekir.
Android 13 için
BOARD_SYSTEM_DLKM_SRC, system_dlkm bölümünü oluşturmak için derleme sistemine giriş olarak cihaz için gerekli GKI modüllerini içeren bir klasöre (çekirdek nesne dosyaları) işaret eder. Örneğin:
GKI modüllerinin kaynağını bir klasörde sağlayın ve BOARD_SYSTEM_DLKM_SRC işaretini bu klasöre yönlendirin. Örneğin:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
Derleme sırasında, BOARD_SYSTEM_DLKM_SRC içinde listelenen modüller $ANDROID_PRODUCT_OUT/system_dlkm'ye yüklenir.
Android 14 için
Diğer *_dlkm bölümleri için kullanılan makrolarla (BOARD_*_KERNEL_MODULES) uygulamayı kolaylaştırdık. Cihaz için gerekli GKI modüllerinin listesi, BOARD_SYSTEM_KERNEL_MODULES makrosuyla referans verilmelidir. Bu modüller, derleme sırasında $ANDROID_PRODUCT_OUT/system_dlkm içine yüklenir. vendor_dlkm bölümündeki modüllere bağımlılıkları olan system_dlkm bölümündeki tüm modüller, vendor_dlkm bölümü için modules.dep dosyasında doğru referanslar oluşturur. modules.dep ile gösterilen bölümler arası bağımlılıklar nedeniyle, bir satıcı modülü yüklendiğinde gerekli GKI modülleri otomatik olarak yüklenir.
Örneğin, önceden oluşturulmuş dosyalardan system_dlkm bölümüne 5.15 çekirdeği için tüm GKI modüllerini yüklemek üzere:arm64
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Çalışma zamanında system_dlkm bağlama
Salt okunur dosya sistemi olarak kullanılan dosya sistemine bağlı olarak, fstab dosyanıza aşağıdakileri ekleyerek system_dlkm bölümünü çalışma zamanında bağlayın:
ext4 salt okunur dosya sistemi olarak
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs salt okunur dosya sistemi olarak
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
Bölüm montajı ve modül yükleme
first_stage_init sırasında system_dlkm bölümü, /system_dlkm içinde salt okunur dosya sistemi olarak bağlanır. Başarılı bir bağlama işleminde, /system/lib/modules konumundaki /system_dlkm/lib/modules konumunu işaret eden sembolik bağlantılar kullanılabilir.
Daha sonra .rc gibi bir satıcı süreci, modules.load içinde belirtilen sıraya göre çekirdek modüllerini yükleyebilir. Tedarikçi süreci, modülleri yüklemek için /system/lib/modules sembolik bağlantısını kullanmalıdır.
Gerekirse tedarikçi süreci, modülleri daha sonra da yükleyebilir.
SELinux
system_dlkm bölümündeki her dosya, system_dlkm_file dosya bağlamıyla etiketlenir. GKI modülleri dosyasını system_dlkm bölümüne yüklemek için modüllerin yüklenmesinden sorumlu satıcı sürecinin satıcı alanında sepolicy olması gerekir.
Örneğin, Cuttlefish tarafından GKI modüllerini yüklemek için kullanılan dlkm_loader, shared/sepolicy/vendor/dlkm_loader.te konumundaki politika dosyasında aşağıdaki izinlere sahiptir:
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;
system-dlkm bölümünü doğrulama
Google, system_dlkm bölümünü doğrulamak için bir GKI VTS test durumu sağlar. Testi manuel olarak çağırmak için aşağıdaki atest komutunu kullanın:
atest -c vts_dlkm_partition_test