Android 核心常見問題

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

穩定版核心是否可以變更核心模組介面 (KMI) 符號清單?

如果變更不會影響現有 KMI,則可新增至凍結的 Kernel。這些變更包括新的匯出函式和符號清單項目。 詳情請參閱「管理符號清單」。

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

如果核心的 KMI 凍結,就無法變更 KMI 介面中的結構。在 KMI 凍結前,這些結構可以變更。

只要不破壞二進位檔或來源相容性,我可以變更核心嗎?

如要進行不會影響 KMI 的變更,請參閱「Android 專屬修補程式」一文。

GKI 如何處理核心設定?

如要瞭解核心設定,請參閱「gki_defconfig 的變更」。

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

如果您根據 Android Common Kernel (ACK) 中的驅動程式建立供應商模組,您有責任確保上游和 ACK 的錯誤修正會傳播至您的模組。一般來說,建議您使用 GKI 核心和 GKI 模組,且不要修改,這樣 Google 就能持續提供更新。

是否有 GKI 專屬測試?

供應商測試套件 (VTS) 測試會驗證是否已安裝認證的 GKI 建構版本,並強制執行每個版本的 GKI 需求。舉例來說,Android 12 VTS 測試適用於開機標頭 v3,且可驗證執行 5.10 核心的裝置中是否含有必要分割區。

如何為裝置建構作業建立專案 defconfig 片段檔案?

許多符合 GKI 規範的裝置會使用設定片段來描述所需的設定選項,以及建構供應商模組。gki_defconfigACK 程式碼基底中的範例包括 Cuttlefish 和 DB845c。您無法完全避免手動檢查設定選項,以最佳化片段,但 scripts/diffconfig 中的核心來源有助於比較 gki_defconfiggki_defconfig+device.fragment 的結果。

modprobe 是否有因應做法,可將 - 和 _ 視為同等項目?

modprobe 說明頁面包含以下說明:「modprobe intelligently adds or removes a module from the Linux kernel: note that for convenience, there is no difference between _ and - in module names (automatic underscore conversion is performed).」GKI 團隊遵循標準上游慣例,因此供應商工具或模組命名慣例必須將這項遵循事項納入考量。

如何啟用 debugfs 以供內部使用?

如要瞭解如何啟用 debugfs,請參閱「intrusive downstream debug features」。

如何解決啟用特定模組設定後,GKI 核心與 ABI 不符的問題?

GKI 核心和模組設定之間的 ABI 不符,代表隱含的模組設定依附元件,啟用模組會導致二進位設定建構到產生的核心映像檔中。請與 Android 核心團隊 (kernel-team@android.com) 聯絡,決定後續做法。確定符號清單後,請在 Issue Tracker 中建立錯誤,並上傳符號清單的變更。