為供應商模組維護穩定的核心模組介面 (KMI) 至關重要。GKI 核心是以二進位格式建構及提供,且供應商可載入的模組建構在獨立的樹狀結構中。產生的 GKI 核心和供應商模組必須能一起運作。
一般而言,Linux 社群對於主要核心核心的核心 ABI 穩定性概念十分重要。面對不同的工具鍊、設定和不斷演進的 Linux 主線核心,在主線上維護穩定的 KMI 是不切實際的。不過,您可以在設有嚴格限制的 GKI 環境中維持穩定的 KMI,但設有下列限制:
只有單一設定 (
gki_defconfig
) 可用於建構核心。KMI 僅在相同的 LTS 和 Android 版本的核心中穩定,例如
android13-5.10
、android12-5.10
或android13-5.15
。android-mainline
不會維持 KMI 穩定性。
只有 AOSP 提供的特定 Clang 工具鍊,以及為相應分支定義的工具鍊,才能用於建構核心和模組。
系統只會監控符號清單中指定的模組使用的符號,確認是否穩定,且系統會將這些符號視為 KMI 符號。
- 相應的做法是,供應商模組只能使用 KMI 符號。如果需要非 KMI 符號,則會透過失敗的模組載入方式強制執行此限制。
KMI 分支凍結後,系統會允許變更,但不能破壞 KMI。這些變更包括:
- 設定變更
- 核心程式碼變更
- 工具鍊變更 (包括更新)
使用密封的建構程序和 LLVM 工具鍊
密封建構程序會在 kernel/manifest
使用 repo
資訊清單完整描述建構環境,確保 KMI 穩定。舉例來說,android13-5.15
的資訊清單包含工具鍊、建構指令碼,以及建構通用核心映像檔 (GKI) 核心所需的所有其他內容。相應的 build.config
設定檔 (例如 GKI 建構設定 build.config.gki.aarch64
) 可確保正確使用所附工具,產生一致的建構結果。
使用密封式建構程序,還可確保樹狀結構的 ABI 說明是否一致,無論是 Google 產生的 (例如 android13-5.15
的 abi_gki_aarch64.xml
),或是在包含供應商模組的本機樹狀結構中產生的。核心模組介面 (KMI) 的ABI 說明文件建立和比較工具也提供為清單檔案所述的存放區的一部分。
用於建構 GKI 核心的工具鍊,必須與用於建構供應商模組的工具鍊完全相容。自 Android 10 起,所有 Android 核心都必須使用 LLVM 工具鍊建構。在 GKI 中,用於建構產品核心和供應商模組的 LLVM 工具鍊,必須產生與 AOSP 的 LLVM 工具鍊相同的 ABI,合作夥伴也必須確保 KMI 與 GKI 核心相容。我們強烈建議您使用提供的建構工具,因為這些工具提供最佳相容性。
後續步驟
如要瞭解如何使用密封建構程序和 LLVM 工具鍊建構核心,請參閱「建構核心」。
如要瞭解如何監控 ABI 及修正問題,請參閱「Android 核心 ABI 監控」一文。