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

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 kullanılarak Google tarafından imzalanır anahtar çifti ve yalnızca birlikte ürettikleri GKI ile uyumludur. GKI ve GKI modülleri arasında ABI kararlılığı yoktur; yüklemeniz gerekir. doğru şekilde çalışmadığında, GKI ve GKI modüllerinin derlenip güncellenmesi gerekir. birlikte.

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ılı bir şekilde yüklenmesi için GKI ve GKI modüllerinin derlenmesi gerekir birlikte. Bu nedenle, hedef mimariyi seçin ve system_dlkm bölümü için kaynak olarak bunu sağlayın bahsedeceğim.

Android 13 için

BOARD_SYSTEM_DLKM_SRC ��ğesini, gerekli GKI modüllerini içeren klasöre yönlendirin. oluşturmak için derleme sistemine giriş olarak cihazın çekirdek nesne dosyalarını system_dlkm bölümlendirmesi. Ö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

BOARD_SYSTEM_DLKM_SRC içinde listelenen modüller, derleme sırasında şurada yüklenir: $ANDROID_PRODUCT_OUT/system_dlkm.

Android 14 için

Makrolarla uygulama işlemini kolaylaştırdık (BOARD_*_KERNEL_MODULES) başka *_dlkm bölüm. Cihaz için gerekli GKI modüllerinin listesi şu şekilde olmalıdır: BOARD_SYSTEM_KERNEL_MODULES makrosu tarafından referans verildi. 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ü. Temsil edilen çapraz bölüm bağımlılıkları modules.dep tarafından, bir tedarikçi modülü yüklendiğinde gerekli tüm GKI modülü 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 okunur dosya sistemi olarak kullanılan dosya sistemine bağlı olarak çalışma zamanında system_dlkm bölümünü eklemek için fstab içinde şunu 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 ekleme ve modül yükleme

first_stage_init sırasında system_dlkm bölümü Salt okunur bir dosya sistemi olarak /system_dlkm. Başarılı bir dağda, sembolik /system/lib/modules konumunda /system_dlkm/lib/modules öğesine işaret eden 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 firma tarafından da modülleri daha sonra yükleyebilirsiniz.

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 tarafından GKI modüllerini yüklemek için kullanılan dlkm_loader şu adresteki politika dosyasında: shared/sepolicy/vendor/dlkm_loader.te:

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. Alıcı: testi manuel olarak çağırmak için aşağıdaki atest komutunu kullanın:

  atest -c vts_dlkm_partition_test