使用高於 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
中的檔案進行寫入存取以開啟偵錯資料收集。 - Bugreport 產生:當
dumpstate
呼叫DumpstateBoard()
時,dumpstate HAL 會讀取DebugFS
檔。此資訊將成為錯誤報告的一部分。 - 特定於設備的測試和驗證。
下表描述了 Android 12 如何支援這三個類別中的每一個。請注意,以下內容僅適用於 userdebug 版本,因為無法在使用者版本中安裝DebugFS
。
使用案例 | Android 12 用戶調試構建 |
---|---|
啟動期間一次DebugFS 檔案初始化。此訪問在啟動期間僅發生一次。 | Dumpstate HAL 在 HAL 初始化期間執行此操作。為了實現相同的功能,init 在 HAL 初始化之前在 userdebug 版本中安裝DebugFS 。當設備完成啟動時, Init 在DebugFS 上呼叫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 root
和shell
存取 - 確保首先安裝 DebugFS)
開發人員可以設定調試持久性屬性persist.dbg.keep_debugfs_mounted
以在 userdebug 和 eng 版本重新啟動時保持DebugFs
掛載。
GTS 合規性測試可確保DebugFS
檔案系統不會安裝在使用者建置中。 Sepolicy neverallow
語句確保在 Android 12 或更高版本上啟動的裝置中,不會向未經授權的程序提供對DebugFs
的存取權。