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
dosyasını düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesinin
konumundanm
konumuna (=m
) ayarlayın. Bu ayarı hemarch/arm64/configs/gki_defconfig
hem dearch/x86/configs/gki_defconfig
konumunda yapın.Özellik için oluşturulan KO (
.ko
) dosyalarınıcommon/modules.bzl
'ı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 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_ARCHITECTURE
bö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_exports
içinaarch64
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
dizinlerine 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ı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_defconfig
dosyasını düzenleyin ve gerekli çekirdek özelliğinin yapılandırma öğesiniy
'danm
'ye (=m
) ayarlayın. Bu ayarı hemarch/arm64/configs/gki_defconfig
hem dearch/x86/configs/gki_defconfig
içinde ayarlayın.Özellik için oluşturulan KO (
.ko
) dosyalarınıcommon/modules.bzl
'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 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.aarch64
içintools/bazel run //common:kernel_aarch64_abi_update_protected_exports
kullanı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.img
veout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
dizinlerine 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ı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_LIST
dosyasındakicommon/modules.bzl
listesine ekleyin.Android 14'te, dönüştürülen modülü
common/android/gki_protected_modules
adresindeki 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_exports
kullanarakaarch64
iç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.