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

Bu sayfada yeni bir çekirdek özelliğinin GKI modülü olarak nasıl yapılandırılacağı veya mevcut bir yerleşik çekirdek özelliğinin GKI modülü olarak nasıl yapılandırılacağı anlatılmaktadı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 m ( =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ı common/modules.bzl dosyasını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 eklenecek tüm gerekli KO dosyalarını listeler.

  3. Modülü korumalı bir GKI modülü olarak belirlemek için, çalışma zamanında ikili arama için artan düzende sıralanmış olarak 2. adımdaki aynı KO dosyaları kümesini common/android/gki_{ARCH}_protected_modules ekleyin. Korunan dışa aktarmaların listesini, aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports kullanarak common/android/abi_gki_protected_exports_{ARCH} dosyasına yeni eklenen modülden olanları içerecek şekilde güncelleyin. Korumalı GKI modülleri olarak belirlenen modüllerin resmi korumalı modüller olması için yine de Google tarafından onaylanması gerekir.

  4. 2. adımdan yeni eklenen KO dosyalarının çekirdeğin out/<androidX-YZ>/dist/system_dlkm.img ve out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz dizinine kopyalandığından emin olun. system_dlkm_staging_archive.tar.gz arşivindeki modüller, platform yapısında system_dlkm.img dosyasını oluşturmak için girdi olarak kullanılabilir.

  5. Değişikliklerinizi incelenmek üzere gönderin. GKI modülleri yalnızca Android'e özgü bir çekirdek özelliğidir, bu nedenle modül dönüştürme yamalarının yukarı akışa gönderilmesi gerekmez. Ancak Android Ortak Çekirdek (ACK) yamalarını göndermek için diğer yönergeleri uygulamanız gerekir.

Bir ç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 m ( =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ı common/modules.bzl dosyasını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 eklenecek tüm gerekli KO dosyalarını listeler.

  3. Modülü korumalı bir GKI modülü olarak belirlemek için, çalışma zamanında ikili arama için artan düzende sıralanmış olarak 2. adımdaki aynı KO dosyaları kümesini common/android/gki_{ARCH}_protected_modules ekleyin. Korunan dışa aktarmaların listesini, aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports kullanarak common/android/abi_gki_protected_exports_{ARCH} dosyasına yeni eklenen modülden olanları içerecek şekilde güncelleyin. Korumalı GKI modülleri olarak belirlenen modüllerin resmi korumalı modüller olması için yine de Google tarafından onaylanması gerekir.

  4. 2. adımdaki yeni dönüştürülen modül KO dosyalarının çekirdeğin out/<androidX-YZ>/dist/system_dlkm.img ve out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz dizinine kopyalandığından emin olun. system_dlkm_staging_archive.tar.gz arşivindeki modüller, platform yapısında system_dlkm.img dosyasını oluşturmak için girdi olarak kullanılabilir.

  5. Değişikliklerinizi incelenmek üzere gönderin. GKI modülleri yalnızca Android'e özgü bir çekirdek özelliğidir, bu nedenle modül dönüştürme yamalarının yukarı akışa gönderilmesi gerekmez. Ancak Android Ortak Çekirdek (ACK) yamalarını göndermek için diğer yönergeleri uygulamanız gerekir.

Korumalı bir GKI modülünü korumasız modüle dönüştürün

  1. Korumalı durumdan korumasız duruma dönüştürülen modülü common/android/gki_protected_modules adresindeki korumalı modüller listesinden kaldırın.

  2. aarch64 için tools/bazel run //common:kernel_aarch64_abi_update_protected_exports kullanarak common/android/abi_gki_protected_exports_{ARCH} içindeki yeni dönüştürülmüş korumasız modülden olanları hariç tutmak için korunan dışa aktarmaların listesini güncelleyin.

  3. Değişikliklerinizi incelenmek üzere gönderin. GKI modülleri yalnızca Android'e özgü bir çekirdek özelliğidir, bu nedenle modül dönüştürme yamalarının yukarı akışa gönderilmesi gerekmez. Ancak Android Ortak Çekirdek (ACK) yamalarını 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 sembol korumasını ihlal ettiğinde, modül yükleme sırasında iki tür hatayla karşılaşılabilir ve bu da hatayla sonuçlanır.

1. Korumalı sembolü kullanan imzasız modül

Hata:

module: Protected symbol: some_kernel_function (err -13)

Neden:

module.ko dosyası imzasız bir satıcı modülüdür ve satıcı sembolü listesinde listelenmeden yükleme sırasında GKI modülünden dışa aktarılan some_kernel_function sembolünü çözmeye çalışır.

Çözünürlük:

module.ko korumalı bir GKI modülü değilse, sembol listesinin güncellenmesi, satıcı sembol listesine some_kernel_function eklenerek hatayı çözecektir. Alternatif olarak module.ko GKI sürümünü kullanın.

2. Korumalı sembolü dışa aktaran imzasız modül

Hata:

module: exports protected symbol some_kernel_function

Neden:

some_kernel_function işlevini 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ışarı aktarılabilen some_kernel_function dışarı aktarmaya çalıştığında yükleme bu mesajla başarısız olur.

Çözünürlük:

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