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_defconfigdosyasını düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesininkonumundanmkonumuna (=m) 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ıcommon/modules.bzl'ınCOMMON_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 KO dosyalarını listeler.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.Android 14 ve 15 için dışa aktarma listesini,
common/android/abi_gki_protected_exports_ARCHITECTUREbölümünde 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_exportsiçinaarch64komutunu ç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.
Yerleşik bir çekirdek özelliğini GKI modülü olarak yapılandırma
Mevcut bir yerleşik çekirdek özelliği için
gki_defconfigdosyasını düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesiniy'danm'ye (=m) ayarlayın. Bu ayarı hemarch/arm64/configs/gki_defconfighem dearch/x86/configs/gki_defconfigiçinde ayarlayın.Özellik için oluşturulan KO (
.ko) dosyalarınıcommon/modules.bzl'nınCOMMON_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 KO dosyalarını listeler.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.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.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ü
COMMON_UNPROTECTED_MODULES_LISTdosyasındakicommon/modules.bzllistesine ekleyin.Android 14'te, dönüştürülen modülü
common/android/gki_protected_modulesadresindeki korumalı modüller listesinden kaldırın.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_exportskullanarakaarch64için hariç tutun.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 öğesini 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, some_kernel_function dışa aktaran modülün GKI sürümü kullanılarak düzeltilebilir.