GKI modülü bölümünü uygulama

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:

  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 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