GKI ve GKI modülleri, bölümün geri kalanından bağımsız olarak güncellenebilir.
Çünkü GKI modülleri üst görüntüde ayrı bir dinamik bölümde bulunur
system_dlkm
olarak adlandırıldı. 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 uygulayın
system_dlkm
bölümü, süper bölümde başka bir dinamik
bölüm. Bu bölüm şunları içerebilir:
- Google derleme zamanı imzalı çekirdek modülleri
depmod
yapı
Derleme: system_dlkm
system_dlkm
oluşturmak, başka dinamikler oluşturmaya benzer bir süreçtir
her bölüm için geçerlidir. system_dlkm
ürününü derlemenize 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 aşağıdaki satırı, Cihazınız için
device.mk
dosyası: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
BOARD_SYSTEM_DLKM_SRC
, system_dlkm
bölümünü oluşturmak için derleme sistemine giriş olarak cihaz için gerekli GKI modülleri çekirdek nesne dosyalarını içeren bir klasöre yönlendirilmelidir. Örnek:
GKI modüllerinin kaynağını bir klasörde sağlayın ve BOARD_SYSTEM_DLKM_SRC
öğesine gidin.
söz konusu klasörde bulunabilir. Ö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
Makrolarla uygulama işlemini kolaylaştırdık
(BOARD_*_KERNEL_MODULES
) başka konum için kullanılıyor
*_dlkm
bölüm. 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. Projedeki herhangi bir modül
system_dlkm
içindeki modüllere bağımlılığı olan vendor_dlkm
bölümü
bölüm, şunun için modules.dep
dosyasında doğru başvurular oluşturur:
vendor_dlkm
bölümü. 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, GKI için system_dlkm
bölümüne tüm GKI modüllerini yüklemek
Önceden oluşturulmuş, arm64
çekirdek 5.15
:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Çalışma zamanında system_dlkm
ekle
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
Salt okunur dosya sistemi olarak erofs
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 firma işlemi çekirdek modüllerini yükleyebilir.
modules.load
içinde belirtilen sıraya göre. Tedarikçi firma sürecinde
yüklemek için /system/lib/modules
sembolik bağlantısını kullanın.
Gerekirse tedarikçi süreci modülleri daha sonra da yükleyebilir.
SELinux
system_dlkm
bölümündeki her dosya şu dosya bağlamıyla etiketlenir:
system_dlkm_file
. GKI modülleri dosyasını system_dlkm
bölümünde yüklemek için,
modüllerin yüklenmesinden sorumlu tedarikçi firma sürecinde sepolicy
seçeneğini belirleyin.
Ö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 durumu sağlar. Testi manuel olarak çağırmak için aşağıdaki atest
komutunu kullanın:
atest -c vts_dlkm_partition_test