本頁說明通用核心映像檔 (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 核心二進位檔。