請務必為供應商模組維持穩定的核心模組介面 (KMI)。GKI 核心會以二進位形式建構及出貨,供應商可載入的模組則會建構在個別樹狀結構中。產生的 GKI 核心和供應商模組必須像是一起建構而成。
一般來說,Linux 社群不贊成主流核心的 ABI 穩定性概念。面對不同的工具鍊、設定和不斷演進的 Linux 主線核心,在主線中維持穩定的 KMI 並不可行。不過,在高度受限的 GKI 環境中,只要遵守下列限制,就能維持穩定的 KMI:
只能使用單一設定 (
gki_defconfig
) 建構核心。KMI 僅在相同 LTS 和 Android 核心版本 (例如
android14-6.1
、android15-6.6
或android16-6.12
) 中穩定。- 「
android-mainline
」未維持 KMI 穩定性。
- 「
建構核心和模組時,只會使用 Android 開放原始碼計畫提供的特定 Clang 工具鍊,並為對應分支定義。
只有符號清單中指定的模組使用的符號,才會受到穩定性監控,並視為 KMI 符號。
- 因此,供應商模組只能使用 KMI 符號。如果需要非 KMI 符號,系統會強制執行這項限制,導致模組載入失敗。
KMI 分支凍結後,您仍可進行變更,但不得破壞 KMI。 包括:
- 設定變更
- 核心程式碼變更
- 工具鍊變更 (包括更新)
使用密封建構程序和 LLVM 工具鍊
密封建構程序會透過 repo
資訊清單kernel/manifest
完整說明建構環境,確保 KMI 穩定。舉例來說,android16-6.12
的資訊清單包含工具鍊、建構系統,以及建構通用核心映像檔 (GKI) 核心所需的一切。建構設定 (主要是 BUILD.bazel
) 可確保正確使用內含工具,產生一致的建構結果。
使用密封建構程序也能確保樹狀結構的 ABI 說明一致,無論是由 Google (例如 gki/aarch64/abi.stg
適用於 android16-6.12
) 產生,還是由包含供應商模組的本機樹狀結構產生,都是如此。資訊清單描述的存放區也提供工具,可建立及比較核心模組介面 (KMI) 的 ABI 說明。
用來建構 GKI 核心的工具鍊,必須與用來建構供應商模組的工具鍊完全相容。自 Android 10 起,所有 Android 核心都必須使用 LLVM 工具鍊建構。使用 GKI 時,用於建構產品核心和供應商模組的 LLVM 工具鍊,必須產生與 AOSP LLVM 工具鍊相同的 ABI,合作夥伴也必須確保 KMI 與 GKI 核心相容。強烈建議使用提供的建構工具,因為這些工具的相容性最佳。
後續步驟
如要瞭解如何使用密封建構程序和 LLVM 工具鍊建構核心,請參閱「建構核心」。
如要瞭解如何監控 ABI 及修正問題,請參閱「Android 核心 ABI 監控」。