產品核心 (也稱為裝置核心或OEM 核心) 是您在裝置上出貨的核心。在 GKI 推出之前,產品核心是源自一系列上游核心變更。圖 1 顯示核心新增項目如何產生產品核心 (OEM/裝置核心):
圖 1. 在 GKI 產品推出前建構核心。
- 我們使用 Android 專屬修補程式修改了 kernel.org 提供的 Linux 長期支援 (LTS) 核心,並因此產生 Android 通用核心 (ACK)。
- ACK 已由供應商修改,以便為其單晶片系統 (SoC) 新增支援功能。供應商也可能會加入效能或電源最佳化功能。產生的核心稱為「供應商核心」。
- 最後,原始設備製造商 (OEM) 進一步修改了供應商核心,加入額外的裝置驅動程式和自訂選項。產生的核心稱為「產品核心」。
所有這些修改作業都可能使多達 50% 的核心程式碼成為樹狀結構外程式碼,而不是來自上游 Linux 核心或 ACK。在採用 GKI 之前,幾乎每部裝置都有自訂核心,導致核心零碎。
分散的成本
核心分散化會對 Android 社群造成多項負面影響。
安全性更新耗費人力
Android 安全性公告 (ASB) 中提及的安全性修補程式必須回移植至各個裝置核心。不過,由於核心分散,為現場的 Android 裝置推送安全性修正項目所費不貲。
難以合併長期支援的更新
長期支援 (LTS) 版本包含安全性修正項目和其他重要錯誤修正項目。持續更新 LTS 版本,已證明是提供安全性修正程式的最有效方式。我們發現,在 Pixel 裝置上,凡是持續更新的裝置,90% 的 ASB 所回報的核心安全性問題都已修正。
不過,由於裝置核心有許多自訂修改項目,因此很難將 LTS 修正項目合併至裝置核心。
禁止 Android 平台版本升級
由於系統分散,因此在現場將需要修改核心的 Android 新功能新增至裝置時,就會遇到困難。Android 架構程式碼必須假設支援最多 5 個核心版本,且新平台版本沒有核心變更 (Android 10 支援 3.18、4.4、4.9、4.14 和 4.19 核心,在某些情況下,自 Android 18 第 18 版以來尚未使用新功能強化)。
很難將 kernel 變更內容貢獻回上游 Linux
由於核心會進行所有變更,因此大多數旗艦裝置出貨時,核心版本至少已推出 18 個月。舉例來說,kernel.org
在 2017 年 11 月發布了 4.14 核心,而第一批搭載 4.14 核心的 Android 手機則在 2019 年春季上市。
由於上游核心版本與產品之間的延遲時間過長,Android 社群很難將所需功能和驅動程式提供給上游核心。
修正分散現象:通用核心映像檔
通用核心映像檔 (GKI) 專案會統一核心核心,並將 SoC 和主機板支援移出核心核心,轉移至可載入的供應商模組,以解決核心分散的問題。GKI 也為供應商模組提供穩定的核心模組介面 (KMI),因此模組和核心可以獨立更新。GKI 核心有以下幾個特性:
- GKI 核心是使用 ACK 來源建構而成。
- GKI 核心是單一核心二進位檔,以及每個 LTS 版本的每個架構相關聯的可載入模組 (目前僅限
android11-5.4
和android12-5.4
的 arm64)。 - 我們會使用與相關 ACK 支援的所有 Android 平台版本測試 GKI 核心。GKI 核心版本的生命週期不會淘汰任何功能。
- GKI 核心會向特定 LTS 中的驅動程式公開穩定的 KMI。
- GKI 核心不包含 SoC 專屬程式碼或主機板專屬程式碼。
如需 GKI 架構的圖片,請參閱核心總覽。
GKI 是複雜的變更,會分階段推出,從 Android 11 平台版本的 5.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) 或 Compatibility Test Suite (CTS) 中的迴歸。
- 使用 Android 開放原始碼計畫常用核心,減輕合作夥伴負擔讓核心保持在最新狀態。
- 針對升級及推出新的 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 核心取代產品核心時,請勿帶來重大效能或迴歸問題。
- 讓合作夥伴在不必仰賴供應商的情況下,提供核心安全性修復和錯誤修正內容。
- 降低更新裝置主要核心版本的成本 (例如從 5.10 升級至 2021 LTS 核心)。
- 透過更新核心版本,並提供明確的升級程序,為每個架構維護單一 GKI 核心二進位檔。
GKI 2.0 代表 Android 核心的最新狀態。GKI 1.0 和「先前核心」(4.19 以下) 子區段以外的核心說明文件,反映的是 GKI 2.0 架構。