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

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

記錄

每部 Android 裝置都需要正式版核心。在 GKI 推出之前,核心是自訂的,並以 Android 通用核心 (ACK) 為基礎,晶片系統 (SoC) 供應商和原始設備製造商 (OEM) 會對裝置進行特定變更。

這項自訂設定可能會導致高達 50% 的核心程式碼為非樹狀結構的程式碼,而非來自上游 Linux 核心或 ACK。因此,GKI 前核心的自訂性質導致核心碎片化情形嚴重。

分散的成本

核心分散化會對 Android 社群造成多項負面影響。

安全性更新耗費人力

Android 安全性公告 (ASB) 中提及的安全性修補程式必須回移至各個裝置核心。不過,由於核心分散,因此要將安全性修補程式傳播到現有 Android 裝置,成本過高。

難以合併長期支援的更新

長期支援 (LTS) 版本包含安全性修正項目和其他重要錯誤修正項目。持續更新 LTS 版本,已證明是提供安全性修正程式的最有效方式。我們發現,在 Pixel 裝置上,凡是持續更新的裝置,90% 的 ASB 所回報的核心安全性問題都已修正。

不過,由於裝置核心有許多自訂修改項目,因此很難將 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 核心二進位檔。