一般核心映像檔 (GKI) 專案

本頁說明通用核心映像檔 (GKI) 專案,以及如何提升 Android 穩定性並改善安全性。

記錄

每部 Android 裝置都需要正式版核心。在 GKI 推出前,核心是根據 Android Common Kernel (ACK) 自訂,並由晶片系統 (SoC) 供應商和 OEM 進行裝置專屬的變更。

這項自訂作業可能會導致多達 50% 的核心程式碼屬於樹狀結構外的程式碼,而非來自上游 Linux 核心或 ACK。因此,前 GKI 核心的自訂性質導致核心嚴重片段化。

片段化成本

核心片段化對 Android 社群有幾項負面影響。

安全性更新耗費大量人力

Android 安全性公告 (ASB) 中提及的安全性修補程式必須回溯移植到每個裝置核心。不過,由於核心片段化,將安全性修正程式傳播至現場的 Android 裝置成本過高,因此無法進行。

難以合併長期支援更新

長期支援 (LTS) 版本包含安全性修正和其他重大錯誤修正。事實證明,採用最新 LTS 版本是提供安全性修正程式最有效的方法。在 Pixel 裝置上,我們發現 ASB 中回報的 90% 核心安全性問題,都已在保持最新狀態的裝置上修正。

不過,由於裝置核心中包含所有自訂修改項目,因此很難只將 LTS 修復程式合併至裝置核心。

禁止 Android 平台發布升級

如果新的 Android 功能需要變更核心,就難以新增至現場裝置。Android 架構程式碼必須考量不同的核心變體,且無法依賴核心中實作的新 Android 功能,這導致創新速度減緩,程式碼大小和複雜度也隨之增加。

難以將 Kernel 變更貢獻回上游 Linux

將修補程式拉入正式版核心的過程支離破碎,導致從上游提供 LTS 版本到裝置採用該版本,最多延遲了 18 個月。上游核心版本與產品之間有很長的延遲時間,因此 Android 社群難以將所需的功能和驅動程式饋送至上游核心。使用者提交改善建議時,程式碼集已變更,因此難以顯示修補程式的相關性。

修正片段化問題:通用核心映像檔

通用核心映像檔 (GKI) 專案會統一核心,並將 SoC 和主機板支援功能從核心移至可載入的供應商模組,藉此解決核心片段化問題。此外,GKI 也為供應商模組提供穩定的核心模組介面 (KMI),因此模組和核心可以獨立更新。GKI 核心的特性如下:

  • GKI 核心是從 ACK 來源建構而來。
  • GKI 核心是單一核心二進位檔,加上每個架構和每個 LTS 版本相關的可載入模組。
  • 我們會針對相關聯 ACK 支援的所有 Android 平台版本,測試 GKI 核心。在 GKI 核心版本生命週期內,不會有任何功能遭到淘汰。
  • GKI 核心會向特定 LTS 內的驅動程式公開穩定的 KMI。
  • GKI 核心不含 SoC 或主機板專屬程式碼。

如要查看 GKI 架構圖片,請參閱核心總覽

一般圖片

從 Android 12 開始,如果裝置出貨時搭載的核心版本為 5.10 以上,就必須搭載 GKI 核心。一般核心映像檔 (GKI) 發布版本會定期更新,並提供 LTS 和重大錯誤修正。由於 KMI 維持二進位檔穩定性,因此您可以安裝這些開機映像檔,而不必變更供應商映像檔。GKI 專案的目標如下:

  • 以 GKI 核心取代產品核心時,請勿造成顯著的效能或電力衰退。
  • 讓合作夥伴能夠提供核心安全性修正和錯誤修正,無須供應商參與。
  • 降低裝置升級主要核心版本的成本。
  • 透過明確的升級程序更新核心版本,為每個架構維護單一 GKI 核心二進位檔。