以 Android 12 啟動且使用核心的裝置
v5.4 以上版本都必須與 GKI 核心一併出貨。以上就是
合作夥伴在 GKI 上開發時,可在使用者偵錯版本中存取 DebugFS
核心,GKI 定義中的核心設定 CONFIG_DEBUG_FS
已啟用。
一律不要在使用者版本中掛接 DebugFS
,以支援裝置
我們在 Android 12 上發布的應用程式
使用者偵錯版本的測試涵蓋範圍優於使用者建構,且大幅取得
在整個開發週期中進行測試下列計劃可將
與 DebugFS
存取權相關的兩種建構類型之間的差異。
好處如下:
- 可避免因
DebugFS
而異,意外防止使用者偵錯建構作業 以便取得新功能 - 確保因缺少 DebugFS 而損毀的現有功能 是關於開發週期初期得知的資訊
Debugfs 存取使用者偵錯版本的行為會歸類為 如下:
DebugFS
檔案在裝置啟動期間初始化,例如 啟用DebugFS
中檔案的寫入權限,以便啟用偵錯資料收集功能。- 產生錯誤報告:在下列情況下,轉儲狀態 HAL 會讀取
DebugFS
檔案DumpstateBoard()
是由dumpstate
叫用。這個 相關資訊會納入錯誤報告中。 - 特定裝置的測試與驗證。
下表說明這三種類別
Android 12 支援的部分功能。請注意,
由於 DebugFS
無法
掛接於使用者的建構作業中
用途 | Android 12 使用者偵錯版本 |
---|---|
一次性 DebugFS 檔案在啟動期間初始化。
這項存取權在啟動期間「隻共享一次」。
|
Dumpstate HAL 會在 HAL 初始化期間執行這項作業。如要啟用這項功能
在 HAL 初始化之前,init 會在使用者偵錯版本掛接 DebugFS 。
Init 會在以下情況呼叫 DebugFS 上的 umount() :
裝置已完成啟動
|
產生錯誤報告:傾印狀態 HAL 讀取
DebugFS 檔案,包含在錯誤報告中。
|
由轉儲狀態叫用時,由 DumpstateBoard() 內的轉儲狀態 HAL 完成
(DumpstateDevice.cpp)。
轉儲狀態工具 (Android 架構的一部分) 可確保 DebugFS
會在叫用期間掛接。
|
特定裝置的測試與驗證 | Adb 根層級和殼層。使用以下指令,從 ADB 殼層掛接 DebugFS
根目錄存取權1。
|
1若要從 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
,讓 DebugFs
固定在下列位置:
會在 userdebug 和 eng 版本上重新啟動。
並測試 GTS 法規遵循測試,確保 DebugFS
檔案系統未
掛接於使用者的建構作業中Sepolicy neverallow
陳述式可確保在裝置中
在 Android 12 以上版本中啟動、提供未經授權的程序
存取 DebugFs
。