將內核功能配置為 GKI 模塊

本頁介紹如何將新核心功能配置為 GKI 模組或將現有內建核心功能配置為 GKI 模組。

將新功能配置為 GKI 模組

  1. 對於新功能,編輯gki_defconfig並將所需核心功能的配置項目從n設為m ( =m )。在arch/arm64/configs/gki_defconfigarch/x86/configs/gki_defconfig中設定此設定。

  2. 將針對此功能產生的 KO ( .ko ) 檔案新增至common/modules.bzlCOMMON_GKI_MODULES_LIST部分。按排序順序新增檔案。如果您不確定生成的所有文件,構建將失敗並列出要添加到列表中的所有必需的 KO 文件。

  3. 將步驟 2 中的同一組 KO 檔案(按運行時二進位搜尋的升序排序)新增至common/android/gki_{ARCH}_protected_modules中,以將該模組指定為受保護的 GKI 模組。使用tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64更新受保護的導出列表,以包含common/android/abi_gki_protected_exports_{ARCH}中新添加的模組中的導出列表。指定為受保護 GKI 模組的模組仍必須經過 Google 批准才能成為官方受保護模組。

  4. 確保將步驟 2 中新新增的 KO 檔案複製到核心的out/<androidX-YZ>/dist/system_dlkm.imgout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gzsystem_dlkm_staging_archive.tar.gz存檔中的模組可用作平台建置中產生system_dlkm.img輸入。

  5. 提交您的更改以供審核。 GKI 模組是 Android 獨有的核心功能,因此不需要向上游提交模組轉換補丁。但是,您必須遵循其他準則來提交Android 通用核心 (ACK) 補丁

將核心內建功能配置為 GKI 模組

  1. 對於現有的內建核心功能,請編輯gki_defconfig並將所需核心功能的配置項目從y設定為m ( =m )。在arch/arm64/configs/gki_defconfigarch/x86/configs/gki_defconfig中設定此設定。

  2. 將針對此功能產生的 KO ( .ko ) 檔案新增至common/modules.bzlCOMMON_GKI_MODULES_LIST部分。按排序順序新增檔案。如果您不確定生成的所有文件,構建將失敗並列出要添加到列表中的所有必需的 KO 文件。

  3. 將步驟 2 中的同一組 KO 檔案(按運行時二進位搜尋的升序排序)新增至common/android/gki_{ARCH}_protected_modules中,以將該模組指定為受保護的 GKI 模組。使用tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64更新受保護的導出列表,以包含common/android/abi_gki_protected_exports_{ARCH}中新添加的模組中的導出列表。指定為受保護 GKI 模組的模組仍必須經過 Google 批准才能成為官方受保護模組。

  4. 確保將步驟 2 中新轉換的模組 KO 檔案複製到核心的out/<androidX-YZ>/dist/system_dlkm.imgout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gzsystem_dlkm_staging_archive.tar.gz存檔中的模組可用作平台建置中產生system_dlkm.img輸入。

  5. 提交您的更改以供審核。 GKI 模組是 Android 獨有的核心功能,因此不需要向上游提交模組轉換補丁。但是,您必須遵循其他準則來提交Android 通用核心 (ACK) 補丁

將受保護的 GKI 模組轉換為不受保護的

  1. common/android/gki_protected_modules的受保護模組清單中刪除從受保護轉換為不受保護的模組。

  2. 使用tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64更新受保護的導出列表,以排除common/android/abi_gki_protected_exports_{ARCH}中新轉換的不受保護模組中的導出列表。

  3. 提交您的更改以供審核。 GKI 模組是 Android 獨有的核心功能,因此不需要向上游提交模組轉換補丁。但是,您必須遵循其他準則來提交Android 通用核心 (ACK) 補丁

GKI 模組符號違規解決快速指南

當未簽署的模組違反 GKI 模組的符號保護時,模組載入期間可能會遇到兩種類型的錯誤,導致失敗。

1. 使用受保護符號的無符號模組

錯誤:

module: Protected symbol: some_kernel_function (err -13)

原因:

module.ko檔案是未簽署的供應商模組,在載入期間嘗試解析 GKI 模組匯出的符號some_kernel_function ,但未列在供應商符號清單中。

解決:

如果module.ko不是受保護的 GKI 模組,則更新符號清單將透過在供應商符號清單中包含some_kernel_function來解決該錯誤。或者,使用module.ko的 GKI 版本。

2. 未簽名模組導出受保護的符號

錯誤:

module: exports protected symbol some_kernel_function

原因:

導出some_kernel_function模組是受保護的 GKI 模組,而module.ko可能是該模組的未簽章自訂版本。當module.ko嘗試匯出some_kernel_function (只能由簽署的 GKI 模組匯出)時,載入失敗並顯示此訊息。

解決:

如果未簽署的模組是自訂版本,則可以透過使用匯出some_kernel_function的模組的 GKI 版本來修正此問題。