通用核心映像 (GKI) 項目

產品內核,也稱為設備內核OEM 內核,是您在設備上附帶的內核。在 GKI 之前,產品核心源自於一系列上游核心變更。圖 1 顯示了內核添加如何產生產品內核(OEM/設備內核):

Pre-GKI產品核心構建

圖 1. Pre-GKI 產品核心建置。

  1. kernel.org 中的Linux 長期支援 (LTS)核心已使用 Android 特定補丁進行了修改,從而產生了Android 通用核心 (ACK)
  2. 供應商修改了 ACK,並增加了對其係統單晶片 (SoC) 的支援。供應商也可能添加效能或功耗優化。產生的核心稱為供應商核心
  3. 最後,OEM 進一步修改了供應商內核,並添加了他們認為必要的附加設備驅動程式和自訂。產生的核心稱為產品內核

所有這些修改都可能導致多達 50% 的核心程式碼是樹外程式碼,而不是來自上游 Linux 核心或 ACK。在 GKI 之前,幾乎每個裝置都有一個自訂內核,這會導致內核碎片。

碎片化的成本

內核碎片對 Android 社​​群有一些負面影響。

安全性更新需要大量人力

Android 安全性公告 (ASB)中引用的安全性修補程式必須向後移植到每個裝置核心。然而,由於核心碎片,在現場向 Android 裝置傳播安全修復程序的成本過高。

難以合併長期支援的更新

長期支援 (LTS)版本包括安全修復和其他關鍵錯誤修復。事實證明,保持最新的 LTS 版本是提供安全修復的最有效方法。在 Pixel 設備上,我們發現 ASB 中報告的 90% 的核心安全問題已經針對保持最新的設備進行了修復。

然而,由於裝置核心中存在所有自訂修改,因此很難將 LTS 修復合併到裝置核心中。

禁止Android平台發布升級

碎片使得需要核心更改的新 Android 功能很難添加到現場設備中。 Android 框架程式碼必須假設支援多達 5 個內核版本,且新平台版本沒有進行任何核心變更(Android 10 支援 3.18、4.4、4.9、4.14 和 4.19 內核,在某些情況下尚未進行更改)自2017 年Android 8 以來增加了新功能)。

很難將核心變更貢獻回上游 Linux

隨著對核心進行的所有更改,大多數旗艦設備附帶的核心版本已經至少 18 個月了。例如, kernel.org於 2017 年 11 月發布了 4.14 內核,第一批使用 4.14 內核的 Android 手機於 2019 年春季發貨。

上游核心版本和產品之間的長時間延遲使得 Android 社​​群很難將所需的功能和驅動程式提供給上游核心。

修復碎片:通用核心映像

通用核心映像 (GKI) 專案透過統一核心核心並將 SoC 和主機板支援從核心核心移至可載入的供應商模組來解決核心碎片問題。 GKI也為供應商模組提供了穩定的核心模組介面(KMI),因此模組和核心可以獨立更新。 GKI 內核的一些特徵是:

  • GKI 核心是根據 ACK 來源建構的。
  • GKI 核心是單核心二進位文件,加上每個架構、每個 LTS 版本的相關可載入模組(目前僅適用於android11-5.4android12-5.4的 arm64 )。
  • GKI 核心已經過相關 ACK 支援的所有 Android 平台版本的測試。 GKI 核心版本的生命週期內不會棄用任何功能。
  • GKI 核心向給定 LTS 內的驅動程式公開穩定的 KMI。
  • GKI 核心不包含特定於 SoC 或特定於主機板的程式碼。

有關 GKI 架構的圖像,請參閱核心概述

GKI 是一項複雜的更改,從 Android 11 平台版本中的 v5.4 核心開始分成幾個階段推出。

目前有兩個 GKI 階段:

  • GKI 1.0 是在 Android 11 中引入的,適用於具有 5.4 核心的裝置。 GKI 1.0 適用於所有搭載 5.4 核心的設備,甚至是搭載 Android 12 或 Android 13 的設備。
  • GKI 2.0 是在 Android 12 中針對具有 5.10 核心的裝置引入的,並且是所有搭載 5.10 或更高版本核心的裝置的新標準。

GKI 1.0

在 GKI 1.0 中,使用核心版本 5.4 啟動的裝置必須通過 GKI 測試(Android 11 及更高版本的平台版本)。 GKI 1.0 目標包含以下內容:

  • 使用 GKI 核心取代產品核心時,請避免供應商測試套件 (VTS)相容性測試套件 (CTS)中的迴歸。
  • 減輕合作夥伴使用 AOSP 通用核心保持核心最新的負擔。
  • 在核心中包含核心 Android 更改,以便裝置升級並啟動新的 Android 版本。
  • 不要破壞 Android 用戶空間。
  • 將特定於硬體的元件從核心核心中分離出來作為可載入模組。

有關 GKI 1.0 文檔,請參閱GKI 1.0 部分

GKI 2.0

在 GKI 2.0 中,使用核心版本 5.10 或更高版本啟動的裝置必須附帶 GKI 核心(從 Android 12 開始)。簽署的啟動映像可用,並透過 LTS 和關鍵錯誤修復定期更新。由於 KMI 保持了二進位穩定性,因此您可以安裝這些啟動映像,而無需變更供應商映像。 GKI 2.0 目標包含以下內容:

  • 使用 GKI 核心替換產品核心時,請勿造成顯著的效能或功耗下降。
  • 使合作夥伴能夠在沒有供應商參與的情況下提供核心安全修復和錯誤修復。
  • 降低更新設備主要核心版本的成本(例如,從 v5.10 到 2021 LTS 核心)。
  • 透過使用清晰的升級流程更新核心版本,維護每個架構的單一 GKI 核心二進位。

GKI 2.0 代表 Android 核心的最新狀態。 GKI 1.0先前的核心 (<=4.19)小節之外的核心文件反映了 GKI 2.0 架構。