GKI modülleri, süper resimde system_dlkm
adlı ayrı bir dinamik bölümde bulunduğundan GKI ve GKI modülleri, bölümün geri kalanından bağımsız olarak güncellenebilir. GKI modülleri, çekirdek derleme zamanı anahtar çifti kullanılarak Google tarafından imzalanır ve yalnızca derlendikleri GKI ile uyumludur.
GKI ve 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ülleri birlikte derlenip güncellenmelidir.
system_dklm bölüm desteğini uygulama
system_dlkm
bölümü, süper bölümde başka bir dinamik bölüm olarak bulunur. Bu bölüm şunları içerebilir:
- Google derleme sırasında imzalanan çekirdek modülleri
depmod
yapı
Derleme: system_dlkm
system_dlkm
oluşturma işlemi, diğer dinamik bölümleri oluşturma işlemine benzer. Derlemenize system_dlkm
eklemek için aşağıdaki adımları uygulayın:
BoardConfig.mk
alanına 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
konumuna kopyalanacak çekirdek modüllerini belirleyin
Modüllerin çalışma zamanında başarıyla yüklenmesi için GKI ve GKI modülleri birlikte derlenmelidir. Bu nedenle, hedef mimari için GKI derlemesinde çekirdek modüllerini tanımlamanız ve platform derlemesi sırasında system_dlkm
bölümü için kaynak olarak bunu sağlamanız gerekir.
Android 13 için
system_dlkm
bölümünü oluşturmak için derleme sistemine giriş olarak BOARD_SYSTEM_DLKM_SRC
öğesini, cihazın gerekli GKI modülleri çekirdek nesne dosyalarını içeren bir klasöre yönlendirin. Örnek:
GKI modülleri kaynağını bir klasörde sağlayın ve BOARD_SYSTEM_DLKM_SRC
öğesini bu klasöre yönlendirin. Örnek:
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
'a 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 gösterilmelidir. Derleme sırasında bu modüller
$ANDROID_PRODUCT_OUT/system_dlkm
içinde yüklüdür. vendor_dlkm
bölümündeki ve system_dlkm
bölümündeki modüllere bağımlı olan tüm modüller, vendor_dlkm
bölümü için modules.dep
dosyasında doğru referanslar oluşturur. modules.dep
tarafından temsil edilen bölümler arası bağımlılıklar nedeniyle, bir tedarikçi modülü yüklendiğinde gerekli tüm GKI modülleri otomatik olarak yüklenir.
Örneğin, önceden oluşturulmuş GKI arm64
çekirdeği 5.15
için system_dlkm
bölümüne tüm GKI modüllerini yüklemek isterseniz:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Çalışma zamanında system_dlkm
'ü bağlama
Salt okuma dosya sistemi olarak kullanılan dosya sistemine bağlı olarak, system_dlkm
bölümünü çalışma zamanında bağlamak için fstab
dosyanıza aşağıdakileri ekleyin:
Salt okunur dosya sistemi olarak ext4
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 bağlama ve modül yükleme
first_stage_init
sırasında system_dlkm
bölümü, /system_dlkm
'ye salt okunur dosya sistemi olarak monte edilir. Başarılı bir montajda, /system/lib/modules
adresinde /system_dlkm/lib/modules
'u işaret eden sembolik bağlantılar kullanılabilir.
Ardından, .rc
komut dosyası gibi bir tedarikçi süreci, çekirdek modüllerini modules.load
içinde belirtilen sıraya göre yükleyebilir. Tedarikçi firma işlemi, modülleri yüklemek için simgesel bağlantıyı /system/lib/modules
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ülleri yüklemekten sorumlu tedarikçi süreci, tedarikçi alanında bir sepolicy
'a ihtiyaç duyar.
Örneğin, Cuttlefish'in GKI modüllerini yüklemek için kullandığı dlkm_loader
, shared/sepolicy/vendor/dlkm_loader.te
adresindeki 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 örneği sağlar. Testi manuel olarak çağırmak için aşağıdaki atest
komutunu kullanın:
atest -c vts_dlkm_partition_test