Android 核心常見問題

本文檔包含有關 Android 核心(也稱為通用核心映像 (GKI) 核心)的常見問題。如果您不熟悉 GKI 和 GKI 內核術語,請參閱內核概述

可以在穩定的內核中更改內核模組介面 (KMI) 符號列表嗎?

不影響現有 KMI 的變更可以添加到凍結的核心中。這些變更包括新的匯出函數和符號清單條目。有關詳細信息,請參閱管理符號列表

我可以更改穩定核心中供應商模組使用的結構嗎?

無法在具有凍結 KMI 的核心中變更屬於 KMI 介面一部分的結構。在 KMI 凍結之前,可以變更這些結構。

只要不破壞二進位/原始碼相容性,我可以更改核心嗎?

可以按照Android 特定補丁中的描述進行不影響 KMI 的變更。

GKI 如何處理核心配置?

有關核心配置的信息,請參閱gki_defconfig 的變更

如何處理覆蓋現有 GKI 模組的上游錯誤修復?

如果您基於Android 通用核心 (ACK)中的驅動程式建立供應商模組,則您需要確保來自上游和 ACK 的錯誤修復傳播到您的模組。一般來說,不加修改地使用 GKI 核心和 GKI 模組符合您的最佳利益,因此 Google 會一致提供這些更新。

有 GKI 特定測試嗎?

供應商測試套件 (VTS)測試可驗證是否安裝了經過認證的 GKI 版本,並強制執行每個版本的 GKI 要求。例如,有針對啟動標頭 v3 的 Android 12 VTS 測試,並驗證執行 5.10 核心的裝置中是否存在所需分割區。

如何為設備建置建立專案 defconfig 片段檔案?

除了gki_defconfig之外,許多符合 GKI 的裝置還使用設定片段來描述建置供應商模組所需的設定選項。 ACK 程式碼庫的範例包括 Cuttlefish 和 DB845c。無法避免對配置選項進行一些手動檢查以優化片段,但是來自核心來源的scripts/diffconfig對於比較gki_defconfiggki_defconfig+device.fragment的結果非常有用。

modprobe 是否有解決方法將 - 和 _ 視為等效?

modprobe 手冊頁包含這樣的描述:“ modprobe智能地從 Linux 核心添加或刪除模組:請注意,為了方便起見,模組名稱中的 _ 和 - 沒有區別(執行自動下劃線轉換)。” GKI 團隊遵守標準上游約定,因此供應商工具或模組命名約定必須考慮到這種遵守情況。

如何啟用 debugfs 供內部使用?

有關啟用 debugfs 的詳細信息,請參閱侵入式下游調試功能

如何解決啟用特定模組配置的 GKI 核心之間不匹配的 ABI?

GKI 核心和模組配置之間不匹配的 ABI 表示隱式模組配置依賴性,其中啟用模組會導致將二進位配置建置到生成的核心映像中。聯絡 Android 核心團隊 ( kernel-team@android.com ) 以確定前進的道路。確定符號清單後,在問題追蹤器中建立錯誤並將變更上傳到符號清單。

我在現場擁有 GKI 1.0 相容設備,運行隨 Android 11 和 12 一起發布的 5.4 核心。有哪些核心升級選項可用,以及在升級到 Android 12 和 13 時如何測試這些設備?

請參閱相容性矩陣,以了解啟動版本和升級版本支援的核心版本清單。以下是兩個升級範例。

範例 1:如果使用者的裝置啟動時搭載 Android 11 和android11-5.4核心 ( GKI 1.0 ),則升級到 Android 12 時可以選擇以下任意選項:

  • 升級到android12-5.10 GKI 2.0核心(強烈建議)。

  • 保留android11-5.4核心。

  • 升級到android12-5.4核心。

範例 2:如果使用者的裝置啟動時執行 Android 12,且核心為android12-5.4android12-5.10 ,則在升級到 Android 13 時可以選擇以下任意選項:

  • 升級到android13-5.10android13-5.15 GKI 2.0核心(強烈推薦)。

  • 保留android12-5.4 GKI 1.0核心。

  • 保留android12-5.10 GKI 2.0核心。

特別是對於 Treble 合規性測試,我們建議您執行以下操作之一:

  • 將合作夥伴核心替換為經過認證的GKI 1.0核心( android11-5.4android12-5.4 )。

  • 根據您的選擇,隨附經過認證的GKI 2.0核心( android12-5.10android13-5.10android13-5.15 )。

您可以從通用核心映像 (GKI) 發布版本下載 GKI 2.0 版本。