使用高於 v5.4 的內核版本啟動 Android 12 的設備需要隨附 GKI 內核。為了讓合作夥伴在 GKI 內核上開發時可以在 userdebug 構建中訪問DebugFS
,在 GKI defconfig 中啟用了內核配置CONFIG_DEBUG_FS
。切勿在 Android 12 上啟動的設備的用戶構建中安裝DebugFS
。
Userdebug 構建比用戶構建具有更好的測試覆蓋率,並且在整個開發週期中都經過大量測試。以下計劃最大限度地減少了兩種構建類型在DebugFS
訪問方面的差異,並提供了以下好處:
- 防止 userdebug 構建意外依賴
DebugFS
來獲得新功能 - 確保在開發週期的早期就知道因缺少 DebugFS 而損壞的任何現有功能
userdebug 構建中的 Debugfs訪問分類如下:
- 設備啟動期間的
DebugFS
文件初始化,例如對DebugFS
中的文件進行寫訪問以打開調試數據收集。 - 錯誤報告生成:當 dumpstate 調用
dumpstate
DumpstateBoard()
時,dumpstate HAL 會讀取DebugFS
文件。此信息成為錯誤報告的一部分。 - 特定於設備的測試和驗證。
下表描述了 Android 12 如何支持這三個類別。請注意,以下內容僅適用於 userdebug 構建,因為DebugFS
無法在用戶構建中掛載。
用例 | Android 12 用戶調試版本 |
---|---|
啟動期間一次性DebugFS 文件初始化。此訪問僅在引導期間發生一次。 | Dumpstate HAL 在 HAL 初始化期間執行此操作。為了啟用相同的功能,init 在 HAL 初始化之前將 DebugFS 掛載到DebugFS 構建中。當設備完成啟動時, Init 在DebugFS 上調用umount() 。 |
錯誤報告生成:轉儲狀態 HAL 讀取DebugFS 文件,這些文件成為錯誤報告的一部分。 | 當由 dumpstate ( DumpstateDevice.cpp ) 調用時,由 DumpstateBoard( DumpstateBoard() 中的 dumpstate HAL 完成。 dumpstate 工具(Android 框架的一部分)確保在調用期間掛載DebugFS 。 |
特定於設備的測試和驗證 | 亞行根和外殼。從具有 root 訪問權限的 adb shell 掛載DebugFS 1 。 |
1要從具有 root 訪問權限的adb shell
掛載DebugFS
,請使用以下命令:
adb shell mount -t debugfs debugfs /sys/kernel/debug
。
所需的合作夥伴操作
合作夥伴必鬚根據 Android 12 設備中的這些變化製定以下規定:
- 使
DebugFS
節點的所有啟動時初始化都發生在 dumpstate HAL 初始化期間。有關如何執行此操作的示例,請參閱DNM:DebugFS
文件的啟動時初始化示例。 - 在運行時不允許
DebugFS
訪問。以下例外情況適用:- 錯誤報告生成(來自 dumpstate HAL)
- 測試和驗證(可通過
adb root
和shell
訪問 - 確保首先安裝 DebugFS)
開發人員可以設置調試持久性屬性persist.dbg.keep_debugfs_mounted
以在 userdebug 和 eng 構建時保持DebugFs
在重新啟動時掛載。
GTS 合規性測試確保DebugFS
文件系統未安裝在用戶構建中。 Sepolicy neverallow
語句確保在 Android 12 或更高版本上啟動的設備中,未提供對DebugFs
的訪問權限。