GKI ve GKI modülleri, bölümün geri kalanından bağımsız olarak güncellenebilir çünkü GKI modülleri, system_dlkm
adı verilen süper görüntüde ayrı bir dinamik bölümde bulunur. GKI modülleri, çekirdek oluşturma zamanı anahtar çifti kullanılarak Google tarafından imzalanır ve yalnızca oluşturuldukları GKI ile uyumludur. GKI ve GKI modülleri arasında ABI kararlılığı yoktur; Modüllerin çalışma zamanı sırasında doğru şekilde yüklenebilmesi için GKI ve GKI modüllerinin birlikte oluşturulup güncellenmesi gerekir.
system_dklm bölüm desteğini uygulayın
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 zamanı imzalı çekirdek modülleri
-
depmod
eserleri
system_dlkm
oluşturun
system_dlkm
oluşturmak, diğer dinamik bölümleri oluşturmaya benzer bir işlemdir. Derlemenize system_dlkm
eklemek için aşağıdaki adımları uygulayın:
BoardConfig.mk
dosyası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
kopyalanacak çekirdek modüllerini belirleyin
Modüllerin çalışma zamanında başarıyla yüklenebilmesi için GKI ve GKI modüllerinin birlikte oluşturulması gerekir. Bu nedenle, hedef mimari için GKI yapısında çekirdek modüllerini tanımlamanız ve bunu platform oluşturma sırasında system_dlkm
bölümü için kaynak 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 aygıt için gerekli GKI modülleri çekirdek nesne dosyalarını içeren bir klasöre yönlendirin. Örneğin:
GKI modüllerinin kaynağını bir klasörde sağlayın ve BOARD_SYSTEM_DLKM_SRC
bu klasöre yönlendirin. Örneğin:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
Oluşturma sırasında BOARD_SYSTEM_DLKM_SRC
listelenen modüller $ANDROID_PRODUCT_OUT/system_dlkm
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 listesine BOARD_SYSTEM_KERNEL_MODULES
makrosu tarafından başvurulmalıdır. Derleme sırasında bu modüller $ANDROID_PRODUCT_OUT/system_dlkm
dosyasına yüklenir. vendor_dlkm
bölümündeki, system_dlkm
bölümündeki modüllere bağımlılığı olan herhangi bir modül, vendor_dlkm
bölümü için modules.dep
dosyasında doğru referansları oluşturur. modules.dep
tarafından temsil edilen bu çapraz bölüm bağımlılıkları nedeniyle, bir satıcı 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 tüm GKI modüllerini system_dlkm
bölümüne yüklemek için:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
system_dlkm
çalışma zamanında bağlayın
Salt okunur 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
aşağıdakileri ekleyin:
Salt okunur bir dosya sistemi olarak ext4
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Salt okunur dosya sistemi olarak erofs
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
salt okunur bir dosya sistemi olarak bağlanır. Başarılı bir bağlamada, /system/lib/modules
adresinde /system_dlkm/lib/modules
işaret eden sembolik bağlantılar mevcuttur.
.rc
betiği gibi bir satıcı işlemi daha sonra çekirdek modüllerini modules.load
dosyasında belirtilen sıraya göre yükleyebilir. Satıcı işlemi, modülleri yüklemek için /system/lib/modules
sembolik bağlantısını kullanmalıdır. Gerekirse satıcı 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ı işleminin satıcı etki alanında bir sepolicy
ihtiyacı vardır.
Örneğin, Cuttlefish tarafından GKI modüllerini yüklemek için kullanılan 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ğrulayın
Google, system_dlkm
bölümünü doğrulamak için bir GKI VTS test senaryosu sağlar. Testi manuel olarak başlatmak için aşağıdaki atest
komutunu kullanın:
atest -c vts_dlkm_partition_test