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
depmod
yapı
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.mk
bö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_dlkm
Bölüm listesine
system_dlkm
ekleyin: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.mk
dosyası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