維護穩定的核心模組介面 (KMI)

維護供應商模組穩定的 KMI 至關重要。 GKI 核心以二進位形式建置和發布,供應商可載入模組建置在單獨的樹中。產生的 GKI 核心和供應商模組必須像一起建置一樣運作。

一般來說,Linux 社群對主線內核的內核 ABI 穩定性概念不以為然。面對不同的工具鏈、配置和不斷發展的Linux主線內核,在主線中維持穩定的KMI是不可行的。但是,在具有以下約束的高度約束的 GKI 環境中保持穩定的 KMI 是可能的:

  • 只能使用單一配置gki_defconfig來建立核心。

  • KMI 僅在相同的 LTS 和 Android 版本的核心中穩定,例如android13-5.10android12-5.10android13-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.15abi_gki_aarch64.xml還是在包含供應商模組的本地樹中產生)。用於建立和比較核心模組介面(KMI) 的ABI 描述也作為清單描述的儲存庫的一部分提供。

用於建構 GKI 核心的工具鏈必須與用於建構供應商模組的工具鏈完全相容。從 Android 10 開始,所有 Android 核心都必須使用 LLVM 工具鏈建置。使用 GKI,用於建立產品核心和供應商模組的 LLVM 工具鏈必須產生與 AOSP 的 LLVM 工具鏈相同的 ABI,且合作夥伴必須確保 KMI 與 GKI 核心相容。強烈鼓勵使用提供的建置工具,因為它們提供相容性保證。

下一步是什麼?