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

Bu sayfada, yeni bir çekirdek özelliğinin GKI modülü olarak nasıl yapılandırılacağı veya mevcut yerleşik bir çekirdek özelliğinin GKI modülü olarak nasıl yapılandırılacağı 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 yerine m (=m) olarak ayarlayın. Bu ayarı hem arch/arm64/configs/gki_defconfig hem de arch/x86/configs/gki_defconfig dosyalarında yapın.

  2. Özellik için oluşturulan KO (.ko) dosyalarını common/modules.bzl dosyasını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 eklenecek tüm gerekli KO dosyalarını listeler.

  3. Android 14 için, modülü korumalı bir GKI modülü olarak tanımlamak üzere 2. adımdaki aynı KO dosya grubunu, çalışma zamanında ikili arama için artan düzende sıralayarak common/android/gki_{ARCH}_protected_modules içine ekleyin.

  4. Android 14 ile 16 için dışa aktarma listesini, common/android/abi_gki_protected_exports_ARCHITECTURE'e 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 klasörüne 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ı yayın öncesi olarak göndermeniz gerekmez. Ancak Android Ortak Çekirdek (ACK) yamaları göndermek için diğer yönergeleri uygulamanız gerekir.

Çekirdek yerleşik özelliğini GKI modülü olarak yapılandırma

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

  2. Özellik için oluşturulan KO (.ko) dosyalarını common/modules.bzl dosyasını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 eklenecek tüm gerekli KO dosyalarını listeler.

  3. Android 14 için, modülü korumalı bir GKI modülü olarak tanımlamak üzere 2. adımdaki aynı KO dosya grubunu, çalışma zamanında ikili arama için artan düzende sıralayarak common/android/gki_{ARCH}_protected_modules içine ekleyin.

  4. Android 14 ile 16 arasında, aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports'yi kullanarak common/android/abi_gki_protected_exports_{ARCH}'te (veya Android 16 için common/gki/{ARCH}/protected_exports'te) yeni eklenen modüldekileri içerecek şekilde korunan dışa aktarma listesini güncelleyin.

  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 dizinine 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ı yayına göndermeniz gerekmez. Ancak Android Common Kernel (ACK) yamaları göndermek için diğer yönergeleri uygulamanız gerekir.

Korumalı bir GKI modülünü korumasız hâle dönüştürme

  1. Android 15 ve sonraki sürümlerde, korumalı olan ve korunmasız olarak dönüştürülen modülü common/modules.bzl dosyasındaki COMMON_UNPROTECTED_MODULES_LIST listesine ekleyin.

  2. Android 14 için, korumalı modülden korumasız modüle dönüştürülen modülü common/android/gki_protected_modules adresindeki korumalı modüller listesinden kaldırın.

  3. Android 14 ile 16 arasında, aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports'yi kullanarak common/android/abi_gki_protected_exports_{ARCH} (veya Android 16 için common/gki/{ARCH}/protected_exports) içindeki yeni dönüştürülmüş korumasız modülden hariç tutmak üzere korunan dışa aktarma listesini 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ı yayın öncesi olarak göndermeniz gerekmez. Ancak Android Common Kernel (ACK) yamaları göndermek için diğer yönergeleri uygulamanız gerekir.

GKI modülleri sembol ihlali çözümü hızlı kılavuzu

İmzasız modüller, GKI modülleri için geçerli olan simge korumasını ihlal ettiğinde modül yükleme sırasında iki tür hatayla karşılaşılabilir ve bu da başarısızlığa neden olur.

1. Korunan simgeyi kullanan imzasız modül

Hata:

module: Protected symbol: some_kernel_function (err -13)

Neden:

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

Çözüm:

module.ko korunan bir GKI modülü değilse simge listesi güncellendiğinde some_kernel_function tedarikçi simgesi listesine eklenerek hata çözülür. Alternatif olarak module.ko için GKI sürümünü de kullanabilirsiniz.

2. Korunan simgeyi dışa aktaran imzasız 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 muhtemelen bu modülün imzasız özel bir 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 bu mesajla başarısız olur.

Çözüm:

İmzasız modül özel bir sürümse bu durum, some_kernel_function öğesini dışa aktaran modülün GKI sürümü kullanılarak düzeltilebilir.