Android內核常見問題

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

可以在穩定的內核中更改內核模塊接口 (KMI) 符號列表嗎?

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

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

不能在 KMI 凍結的內核中更改屬於 KMI 接口的結構。在 KMI 凍結之前,可以更改這些結構。

只要不破壞二進制/源代碼兼容性,我可以更改內核嗎?

可以按照Android 特定補丁 中的說明進行不影響 KMI 的更改。

GKI 如何處理內核配置?

有關內核配置的信息,請參閱對 gki_defconfig 的更改

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

如果您基於Android Common Kernel (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 ) 以確定前進的道路。確定符號列表後,在問題跟踪器中創建一個錯誤並將更改上傳到符號列表。