使用高于 v5.4 的内核版本启动 Android 12 的设备必须随附 GKI 内核。为了让合作伙伴在 userdebug 版本中开发 GKI 内核时可以访问 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 userdebug 版本 |
---|---|
一次性 DebugFS 文件初始化,在启动期间。此访问仅在启动时发生一次。 |
Dumpstate HAL 在 HAL 初始化期间执行此操作。为了启用相同的操作,init 在 HAL 初始化之前在 userdebug 版本中挂载 DebugFS 。当设备完成启动时,Init 会在 DebugFS 上调用 umount() 。 |
Bugreport 生成:dumpstate HAL 读取 DebugFS 文件,这些文件成为错误报告的一部分。 |
由 dumpstate HAL 在 dumpstate 调用 DumpstateBoard() 时在其中完成 (DumpstateDevice.cpp)。dumpstate 工具(Android 框架的一部分)确保在调用期间挂载 DebugFS 。 |
设备特定的测试和验证 | Adb root 和 shell。使用 root 权限1 从 adb shell 挂载 DebugFS 。 |
1要从 adb shell
挂载 DebugFS
并获得 root 访问权限,请使用以下命令
adb shell mount -t debugfs debugfs /sys/kernel/debug
.
合作伙伴必须采取的操作
合作伙伴必须根据 Android 12 设备中的这些更改执行以下操作
- 使
DebugFS
节点的全部启动时间初始化在 dumpstate HAL 初始化期间发生。有关如何执行此操作的示例,请参阅 DNM:DebugFS 文件启动时间初始化示例。 - 不允许在运行时访问
DebugFS
。以下例外情况适用- 错误报告生成(来自 dumpstate HAL)
- 测试和验证(可通过
adb root
和shell
访问 - 确保首先挂载 DebugFS)
开发者可以设置 debug 持久属性 persist.dbg.keep_debugfs_mounted
,以在 userdebug 和 eng 版本中重启后保持 DebugFs
处于挂载状态。
GTS 合规性测试确保 DebugFS
文件系统未在用户版本中挂载。Sepolicy neverallow
语句确保在 Android 12 或更高版本上发布的设备中,未经授权的进程无法访问 DebugFs
。