如果裝置推出時的版本是 Android 12,且核心版本為 5.4 以上版本,則必須搭配 GKI 核心出貨。為了讓合作夥伴在使用 GKI 核心進行開發時,能夠在 userdebug 版本中存取 DebugFS
,我們在 GKI defconfig 中啟用了核心設定 CONFIG_DEBUG_FS
。在 Android 12 上啟動裝置時,請勿在使用者版本中掛載 DebugFS
。
相較於使用者版本,Userdebug 版本的測試涵蓋率更高,且會在整個開發週期中接受大量測試。下列企劃書可將兩種建構類型在 DebugFS
存取權方面的差異降到最低,並提供以下優點:
- 避免使用者偵錯版本意外依賴
DebugFS
取得新功能 - 確保在開發週期初期,就能瞭解缺少 DebugFS 而導致的任何現有功能故障
在使用者偵錯版本中的 Debugfs 存取權分類如下:
- 裝置啟動期間的
DebugFS
檔案初始化作業,例如對DebugFS
中的檔案執行寫入存取權,以便啟用偵錯資料收集作業。 - 產生 Bugreport:當
DumpstateBoard()
由dumpstate
叫用時,dumpstate HAL 會讀取DebugFS
檔案。這項資訊會成為錯誤報告的一部分。 - 裝置專屬測試和驗證。
下表說明 Android 12 如何支援這三個類別。請注意,由於 DebugFS
無法在使用者版本中掛載,因此以下內容僅適用於 userdebug 版本。
用途 | Android 12 使用者偵錯版本 |
---|---|
在啟動期間初始化一次性 DebugFS 檔案。這項存取作業在啟動期間只會發生一次。 |
Dumpstate HAL 會在 HAL 初始化期間執行這項操作。如要啟用相同功能,請在 HAL 初始化前,在 userdebug 版本中初始化掛載 DebugFS 。Init 會在裝置完成啟動時,對 DebugFS 呼叫 umount() 。 |
錯誤報告產生:dumpstate HAL 會讀取 DebugFS 檔案,並納入錯誤報告。 |
由 DumpstateBoard() 中的 dumpstate HAL 在由 dumpstate 呼叫時執行 (DumpstateDevice.cpp)。傾印狀態工具 (Android 架構的一部分) 可確保 DebugFS 在叫用期間掛載。 |
裝置專屬測試和驗證 | ADB 根目錄和殼層。透過具有根存取權的 ADB 殼層1掛載 DebugFS 。 |
1如要透過 adb shell
以 root 存取權掛載 DebugFS
,請使用下列指令:
adb shell mount -t debugfs debugfs /sys/kernel/debug
。
合作夥伴必須採取的行動
合作夥伴必須根據 Android 12 裝置的這些變更實施下列事項:
- 請在 dumpstate HAL 初始化期間,執行
DebugFS
節點的所有啟動時間初始化作業。如需這項作業的範例,請參閱「DNM:DebugFS
檔案的啟動時間初始化範例」。 - 請勿在執行階段允許
DebugFS
存取權。以下為例外狀況:- 產生錯誤報告 (來自 dumpstate HAL)
- 測試和驗證 (可透過
adb root
和shell
存取 - 請務必先掛載 DebugFS)
開發人員可以設定偵錯持續性屬性 persist.dbg.keep_debugfs_mounted
,讓 DebugFs
在 userdebug 和 eng 版本重新啟動時保持掛載狀態。
GTS 相容性測試可確保 DebugFS
檔案系統不會在使用者版本中掛載。Sepolicy neverallow
陳述式可確保在搭載 Android 12 以上版本的裝置上,未經授權的程序不會提供 DebugFs
存取權。