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
Yeni özellik için
gki_defconfig
dosyasını düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesinin
yerinem
(=m
) olarak ayarlayın. Bu ayarı hemarch/arm64/configs/gki_defconfig
hem dearch/x86/configs/gki_defconfig
dosyalarında yapın.Özellik için oluşturulan KO (
.ko
) dosyalarınıcommon/modules.bzl
dosyasınınCOMMON_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.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.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çintools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
komutunu çalıştırın.2. adımda yeni eklenen KO dosyalarının çekirdeğin
out/<androidX-Y.Z>/dist/system_dlkm.img
veout/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 derlemesindesystem_dlkm.img
oluş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ı 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
Mevcut bir yerleşik çekirdek özelliği için
gki_defconfig
dosyasını düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesiniy
yerinem
(=m
) olarak ayarlayın. Bu ayarı hemarch/arm64/configs/gki_defconfig
hem dearch/x86/configs/gki_defconfig
dosyalarında ayarlayın.Özellik için oluşturulan KO (
.ko
) dosyalarınıcommon/modules.bzl
dosyasınınCOMMON_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.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.Android 14 ile 16 arasında,
aarch64
içintools/bazel run //common:kernel_aarch64_abi_update_protected_exports
'yi kullanarakcommon/android/abi_gki_protected_exports_{ARCH}
'te (veya Android 16 içincommon/gki/{ARCH}/protected_exports
'te) yeni eklenen modüldekileri içerecek şekilde korunan dışa aktarma listesini güncelleyin.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
veout/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 derlemesindesystem_dlkm.img
oluş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ı 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 15 ve sonraki sürümlerde, korumalı olan ve korunmasız olarak dönüştürülen modülü
common/modules.bzl
dosyasındakiCOMMON_UNPROTECTED_MODULES_LIST
listesine ekleyin.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.Android 14 ile 16 arasında,
aarch64
içintools/bazel run //common:kernel_aarch64_abi_update_protected_exports
'yi kullanarakcommon/android/abi_gki_protected_exports_{ARCH}
(veya Android 16 içincommon/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.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.