Çekirdek özelliklerini GKI modülleri olarak yapılandırma

Bu sayfada, yeni bir çekirdek özelliğini GKI modülü olarak yapılandırma veya mevcut bir yerleşik çekirdek özelliğini GKI modülü olarak yapılandırma açıklanmaktadır.

Yeni bir özelliği GKI modülü olarak yapılandırma

  1. Yeni özellik için gki_defconfig öğesini düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesini n konumundan m (=m) konumuna ayarlayın. Bu ayarı hem arch/arm64/configs/gki_defconfig hem de arch/x86/configs/gki_defconfig konumunda yapın.

  2. Özellik için oluşturulan KO (.ko) dosyalarını aşağıdaki dosyanın _COMMON_GKI_MODULES_LIST bölümüne ekleyin. Dosyaları sıralı olarak ekleyin. Oluşturulan tüm dosyalardan emin değilseniz derleme başarısız olur ve listeye eklenmesi gereken tüm gerekli KO dosyalarını listeler.

    • android17-6.18 ve sonraki sürümlerde common/bazel/modules_private.bzl'e öğe ekleyin.
    • android16-6.12 ve önceki sürümlerde common/modules.bzl'ye öğe ekleyin.
  3. Android 14 için, modülü korumalı GKI modülü olarak belirlemek üzere common/android/gki_{ARCH}_protected_modules'ya 2. adımda belirtilen KO dosyalarını ekleyin. Bu dosyalar, çalışma zamanında ikili arama için artan düzende sıralanmalıdır.

  4. Android 14 ve 15 için dışa aktarma listesini, common/android/abi_gki_protected_exports_ARCHITECTURE'ya yeni eklenen dışa aktarma işlemlerini içerecek şekilde güncelleyin. Örneğin, listeyi güncellemek için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 komutunu çalıştırın.

  5. 2. adımda yeni eklenen KO dosyalarının çekirdeğin out/<androidX-Y.Z>/dist/system_dlkm.img ve out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz dizinlerine kopyalandığından emin olun. system_dlkm_staging_archive.tar.gz arşivindeki modüller, platform derlemesinde system_dlkm.img oluşturmak için giriş olarak kullanılabilir.

  6. Değişikliklerinizi incelemeye gönderin. GKI modülleri yalnızca Android'e özel bir çekirdek özelliği olduğundan modül dönüştürme yamalarının yukarı akışa gönderilmesi gerekmez. Ancak Android Common Kernel (ACK) yamaları göndermek için diğer yönergelere uymanız gerekir.

Çekirdeğe yerleşik bir özelliği GKI modülü olarak yapılandırma

  1. Mevcut bir yerleşik çekirdek özelliği için gki_defconfig öğesini düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesini y'ten m'ye (=m) ayarlayın. Bu ayarı hem arch/arm64/configs/gki_defconfig hem de arch/x86/configs/gki_defconfig'da ayarlayın.

  2. Özellik için oluşturulan KO (.ko) dosyalarını aşağıdaki dosyanın _COMMON_GKI_MODULES_LIST bölümüne ekleyin. Dosyaları sıralı bir şekilde ekleyin. Oluşturulan tüm dosyalardan emin değilseniz derleme başarısız olur ve listeye eklenmesi gereken tüm gerekli KO dosyalarını listeler.

    • android17-6.18 ve sonraki sürümlerde common/bazel/modules_private.bzl'e öğe ekleyin.
    • android16-6.12 ve önceki sürümlerde, öğeleri `common/modules.bzl` dosyasına ekleyin.
  3. Android 14 için, modülü korumalı GKI modülü olarak belirlemek üzere common/android/gki_{ARCH}_protected_modules'ya 2. adımda belirtilen KO dosyalarını ekleyin. Bu dosyalar, çalışma zamanında ikili arama için artan düzende sıralanmalıdır.

  4. Android 14 ve 15 için, common/android/abi_gki_protected_exports_{ARCH}'da yeni eklenen modüldeki dışa aktarma işlemlerini de içerecek şekilde korunan dışa aktarma listesini güncelleyin. aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports kullanın.

  5. 2. adımda yeni dönüştürülen modül KO dosyalarının, çekirdeğin out/<androidX-Y.Z>/dist/system_dlkm.img ve out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz dizinlerine kopyalandığından emin olun. system_dlkm_staging_archive.tar.gz arşivindeki modüller, platform derlemesinde system_dlkm.img oluşturmak için giriş olarak kullanılabilir.

  6. Değişikliklerinizi incelemeye gönderin. GKI modülleri yalnızca Android'e özel bir çekirdek özelliği olduğundan modül dönüştürme yamalarının yukarı akışa gönderilmesi gerekmez. Ancak Android Common Kernel (ACK) yamaları göndermek için diğer yönergelere uymanız gerekir.

Korumalı bir GKI modülünü korumasız hale getirme

  1. Android 15 ve sonraki sürümlerde, korumalıdan korumasız hale dönüştürülen modülü aşağıdaki dosyada _COMMON_UNPROTECTED_MODULES_LIST listesine ekleyin:

    • android17-6.18 ve sonraki sürümlerde common/bazel/modules_private.bzl'e öğe ekleyin.
    • android16-6.12 ve önceki sürümlerde common/modules.bzl'ye öğe ekleyin.
  2. Android 14'te, dönüştürülen modülü korumalı modüller listesinden kaldırmak için common/android/gki_protected_modules adresine gidin.

  3. Android 14 ve 15 için, common/android/abi_gki_protected_exports_{ARCH} içinde yeni dönüştürülmüş korumasız modüldeki dışa aktarımları hariç tutmak üzere korunan dışa aktarımların listesini aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports kullanarak güncelleyin.

  4. Değişikliklerinizi incelemeye gönderin. GKI modülleri yalnızca Android'e özel bir çekirdek özelliği olduğundan modül dönüştürme yamalarının yukarı akışa gönderilmesi gerekmez. Ancak Android Common Kernel (ACK) yamaları göndermek için diğer yönergelere uymanız gerekir.

GKI modülleri sembol ihlali çözümüyle ilgili hızlı kılavuz

İmzalanmamış modüller, GKI modülleri için geçerli olan sembol korumasını ihlal ettiğinde modül yükleme sırasında iki tür hatayla karşılaşılabilir ve bu durum, yüklemenin başarısız olmasına neden olur.

1. Korunan simgeyi kullanan, imzalanmamış modül

Hata:

module: Protected symbol: some_kernel_function (err -13)

Neden:

module.ko dosyası, imzalanmamış bir katılımcı modülüdür ve yükleme sırasında katılımcı sembol listesinde listelenmeden GKI modülünün dışa aktarılan sembolünü some_kernel_function çözmeye çalışır.

Çözüm:

module.ko, korumalı bir GKI modülü değilse sembol listesinin güncellenmesi, some_kernel_function sembolünü tedarikçi sembol listesine ekleyerek hatayı giderir. Alternatif olarak, module.ko'nın GKI sürümünü kullanın.

2. Korumalı simgeyi dışa aktaran imzalanmamış modül

Hata:

module: exports protected symbol some_kernel_function

Neden:

some_kernel_function öğesini dışa aktaran modül, korumalı bir GKI modülüdür ve module.ko büyük olasılıkla bu modülün imzalanmamış bir özel sürümüdür. module.ko, yalnızca imzalı bir GKI modülü tarafından dışa aktarılabilen some_kernel_function öğesini dışa aktarmaya çalıştığında yükleme işlemi bu mesajla birlikte başarısız olur.

Çözüm:

İmzalanmamış modül özel bir sürümse bu durum, dışa aktarma işlemi yapan modülün GKI sürümü kullanılarak düzeltilebilir some_kernel_function.