Ç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. (İsteğe bağlı) Android 15 ve sonraki sürümler için bu adımı atlayın.

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

  4. Dışa aktarma listesini, common/android/abi_gki_protected_exports_ARCHITECTURE'te yeni eklenen dışa aktarma işlemlerini içerecek şekilde güncelleyin. Örneğin, listeyi güncellemek için aarch64 yerine tools/bazel run //common:kernel_aarch64_abi_update_protected_exports çalıştırın. Korunan GKI modülü olarak tanımlanan modüllerin, resmi korumalı modül olarak kabul edilmek için Google tarafından onaylanması gerekir.

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

Ç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. Modülü korumalı bir GKI modülü olarak tanımlamak için 2. adımdaki aynı KO dosyası grubunu, çalışma zamanında ikili arama için artan düzende sıralayarak common/android/gki_{ARCH}_protected_modules dosyasına ekleyin. Korunan dışa aktarma işlemlerinin listesini, aarch64 için common/android/abi_gki_protected_exports_{ARCH}'te tools/bazel run //common:kernel_aarch64_abi_update_protected_exports kullanarak yeni eklenen modüldekileri içerecek şekilde güncelleyin. Korunan GKI modülü olarak tanımlanan modüllerin, resmi korumalı modül olarak kabul edilmek için Google tarafından onaylanması gerekir.

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

  5. Değişikliklerinizi incelemeye gönderin. GKI modülleri yalnızca Android ç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

    • Android 14 ve önceki sürümler 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.
    • Android 15 ve sonraki sürümler için: Korumalı olan modülü, common/modules.bzl dosyasında COMMON_UNPROTECTED_MODULES_LIST listesine ekleyin.
  1. Korunan dışa aktarma işlemlerinin listesini, aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports değerini kullanarak common/android/abi_gki_protected_exports_{ARCH}'te yeni dönüştürülen korumasız modülün dışa aktarma işlemlerini hariç tutacak şekilde güncelleyin.

  2. Değişikliklerinizi incelemeye gönderin. GKI modülleri yalnızca Android ç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.

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ülebilir. 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 dışa aktaran modülün GKI sürümü kullanılarak düzeltilebilir.