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
Yeni özellik için
gki_defconfigöğesini düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesininkonumundanm(=m) konumuna ayarlayın. Bu ayarı hemarch/arm64/configs/gki_defconfighem dearch/x86/configs/gki_defconfigkonumunda yapın.Özellik için oluşturulan KO (
.ko) dosyalarını aşağıdaki dosyanın_COMMON_GKI_MODULES_LISTbö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.18ve sonraki sürümlerdecommon/bazel/modules_private.bzl'e öğe ekleyin.android16-6.12ve önceki sürümlerdecommon/modules.bzl'ye öğe ekleyin.
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.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çintools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64komutunu çalıştırın.2. adımda yeni eklenen KO dosyalarının çekirdeğin
out/<androidX-Y.Z>/dist/system_dlkm.imgveout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzdizinlerine kopyalandığından emin olun.system_dlkm_staging_archive.tar.gzarşivindeki modüller, platform derlemesindesystem_dlkm.imgoluşturmak için giriş olarak kullanılabilir.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
Mevcut bir yerleşik çekirdek özelliği için
gki_defconfigöğesini düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesiniy'tenm'ye (=m) ayarlayın. Bu ayarı hemarch/arm64/configs/gki_defconfighem dearch/x86/configs/gki_defconfig'da ayarlayın.Özellik için oluşturulan KO (
.ko) dosyalarını aşağıdaki dosyanın_COMMON_GKI_MODULES_LISTbö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.18ve sonraki sürümlerdecommon/bazel/modules_private.bzl'e öğe ekleyin.android16-6.12ve önceki sürümlerde, öğeleri `common/modules.bzl` dosyasına ekleyin.
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.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.aarch64içintools/bazel run //common:kernel_aarch64_abi_update_protected_exportskullanın.2. adımda yeni dönüştürülen modül KO dosyalarının, çekirdeğin
out/<androidX-Y.Z>/dist/system_dlkm.imgveout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzdizinlerine kopyalandığından emin olun.system_dlkm_staging_archive.tar.gzarşivindeki modüller, platform derlemesindesystem_dlkm.imgoluşturmak için giriş olarak kullanılabilir.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
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_LISTlistesine ekleyin:android17-6.18ve sonraki sürümlerdecommon/bazel/modules_private.bzl'e öğe ekleyin.android16-6.12ve önceki sürümlerdecommon/modules.bzl'ye öğe ekleyin.
Android 14'te, dönüştürülen modülü korumalı modüller listesinden kaldırmak için
common/android/gki_protected_modulesadresine gidin.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 listesiniaarch64içintools/bazel run //common:kernel_aarch64_abi_update_protected_exportskullanarak güncelleyin.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.