Ç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 dosyasını düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesini n konumundan m konumuna (=m) 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ı 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 common/modules.bzl klasörüne öğ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ımdaki KO dosyalarının aynısı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 aktarmaları içerecek şekilde güncelleyin. Örneğin, listeyi güncellemek için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports komutunu aarch64 için ç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.

Yerleşik bir çekirdek özelliğini 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'den m'ye (=m) ayarlayın. Bu ayarı hem arch/arm64/configs/gki_defconfig hem de arch/x86/configs/gki_defconfig içinde 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ımdaki KO dosyalarının aynısı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} bölümüne 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 klasörüne öğe ekleyin.
  2. Android 14'te, dönüştürülen modülü common/android/gki_protected_modules adresindeki korumalı modüller listesinden kaldırın.

  3. Android 14 ve 15'te, korunan dışa aktarma listesini güncelleyerek common/android/abi_gki_protected_exports_{ARCH} içinde yeni dönüştürülen korumasız modüldeki dışa aktarmaları tools/bazel run //common:kernel_aarch64_abi_update_protected_exports kullanarak aarch64 için hariç tutun.

  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ü 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ı sembolü 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 sorun, dışa aktarma işlemi yapan modülün GKI sürümü kullanılarak düzeltilebilir some_kernel_function.