在 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. Bugreport 產生:當dumpstate呼叫DumpstateBoard()時,dumpstate HAL 會讀取DebugFS檔。此資訊將成為錯誤報告的一部分。
  3. 特定於設備的測試和驗證。

下表描述了 Android 12 如何支援這三個類別中的每一個。請注意,以下內容僅適用於 userdebug 版本,因為無法在使用者版本中安裝DebugFS

使用案例Android 12 用戶調試構建
啟動期間一次DebugFS檔案初始化。此訪問在啟動期間僅發生一次 Dumpstate HAL 在 HAL 初始化期間執行此操作。為了實現相同的功能,init 在 HAL 初始化之前在 userdebug 版本中安裝DebugFS 。當設備完成啟動時, InitDebugFS上呼叫umount()
錯誤報告產生:dumpstate HAL 讀取DebugFS文件,這些文件成為錯誤報告的一部分。當由 dumpstate ( DumpstateDevice.cpp ) 呼叫時,由DumpstateBoard()內的 dumpstate HAL 完成。 dumpstate 工具(Android 框架的一部分)可確保DebugFS在呼叫期間掛載。
特定於設備的測試和驗證Adb 根目錄和 shell。使用 root 存取權限從 adb shell 掛載DebugFS 1

1要使用 root 存取權限從adb shell掛載DebugFS ,請使用下列命令:

adb shell mount -t debugfs debugfs /sys/kernel/debug

所需的合作夥伴行動

合作夥伴必須根據 Android 12 裝置中的這些變更制定以下內容:

  • 使DebugFS節點的所有啟動時初始化發生在轉儲狀態 HAL 初始化期間。有關如何執行此操作的範例,請參閱DNM: DebugFS檔案的啟動時初始化範例
  • 不允許在運行時存取DebugFS 。以下例外情況適用:
    • 錯誤報告產生(來自轉儲狀態 HAL)
    • 測試和驗證(可透過adb rootshell存取 - 確保首先安裝 DebugFS)

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

GTS 合規性測試可確保DebugFS檔案系統不會安裝在使用者建置中。 Sepolicy neverallow語句確保在 Android 12 或更高版本上啟動的裝置中,不會向未經授權的程序提供對DebugFs的存取權。