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

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:

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