GKI modül bölümü uygulayın

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:

  1. 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
    
  2. Bölüm listesine system_dlkm ekleyin: BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (İ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