在 Android 12 中使用 DebugFS

使用高於 v5.4 的內核版本啟動 Android 12 的設備需要隨附 GKI 內核。為了讓合作夥伴在 GKI 內核上開發時可以在 userdebug 構建中訪問DebugFS ,在 GKI defconfig 中啟用了內核配置CONFIG_DEBUG_FS切勿在 Android 12 上啟動的設備的用戶構建中安裝DebugFS

Userdebug 構建比用戶構建具有更好的測試覆蓋率,並且在整個開發週期中都經過大量測試。以下計劃最大限度地減少了兩種構建類型在DebugFS訪問方面的差異,並提供了以下好處:

  • 防止 userdebug 構建意外依賴DebugFS來獲得新功能
  • 確保在開發週期的早期就知道因缺少 DebugFS 而損壞的任何現有功能

userdebug 構建中的 Debugfs訪問分類如下:

  1. 設備啟動期間的DebugFS文件初始化,例如對DebugFS中的文件進行寫訪問以打開調試數據收集。
  2. 錯誤報告生成:當 dumpstate 調用dumpstate DumpstateBoard()時,dumpstate HAL 會讀取DebugFS文件。此信息成為錯誤報告的一部分。
  3. 特定於設備的測試和驗證。

下表描述了 Android 12 如何支持這三個類別。請注意,以下內容僅適用於 userdebug 構建,因為DebugFS無法在用戶構建中掛載。

用例Android 12 用戶調試版本
啟動期間一次性DebugFS文件初始化。此訪問僅在引導期間發生一次 Dumpstate HAL 在 HAL 初始化期間執行此操作。為了啟用相同的功能,init 在 HAL 初始化之前將 DebugFS 掛載到DebugFS構建中。當設備完成啟動時, InitDebugFS上調用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 rootshell訪問 - 確保首先安裝 DebugFS)

開發人員可以設置調試持久性屬性persist.dbg.keep_debugfs_mounted以在 userdebug 和 eng 構建時保持DebugFs在重新啟動時掛載。

GTS 合規性測試確保DebugFS文件系統未安裝在用戶構建中。 Sepolicy neverallow語句確保在 Android 12 或更高版本上啟動的設備中,未提供對DebugFs的訪問權限。