实现作用域供应商日志记录

Android 11 添加了一个新的 HAL,即 IDumpstateDevice(版本 1.1)。此 HAL 公开了新的方法,可以更严格地限定包含在标准错误报告中的供应商日志的范围,并允许用户版本开启和关闭供应商日志记录(用户版本的默认设置为关闭)。这使 OEM 能够更好地控制特定类型的错误报告中包含的内容。

如果 OEM 选择实现此可选 HAL,则此功能会影响 OEM。SoC 可能会受到影响,具体取决于 OEM 选择通过此 HAL 公开的内容。预计不会对运营商产生影响。

错误报告中包含的内容取决于您认为哪些信息与调试相关,但通常信息越详细越好。

示例和源代码

IDumpstateDevice(已弃用)1.0 版本的默认实现提供了一个使用 dumpstate util 库的示例:frameworks/native/cmds/dumpstate/DumpstateUtil.h。此外,Cuttlefish 还实现了 1.1 HAL:device/google/cuttlefish/guest/monitoring/dumpstate_ext/*

源代码位于此处

实现

要实现此 HAL,请实现 android.hardware.dumpstate@1.1::IDumpstateDevice HAL 接口。 有许多可能的 DumpstateMode 值,但并非所有值都可能受单个设备支持(例如,非 Wear OS 设备的 WEAR)。

实现 dumpstate HAL 是可选的。如果所有搭载 Android 11 的新设备都实现了 Dumpstate HAL,则必须实现 IDumpstateDevice 1.1。对于在 Android 11 之前已实现 IDumpstateDevice 1.0 的设备,升级到 1.1 应该相对容易,强烈建议这样做,因为它可以大大减少错误报告中包含的多余私人信息。

此功能依赖于 Android 11 中包含的核心 dumpstate 更改,这些更改位于 frameworks/native/cmds/dumpstate 下。

实现此 HAL 可能需要对某些系统属性、文件等进行 SEPolicy 更改,才能使其完全正常工作,并且需要与供应商协调,将所有相关信息转储到错误报告中。

自定义

设备用户可以使用开发者设置开启或关闭供应商日志记录。当其关闭时,dumpstateBoard_1_1 仍可能输出 OEM 确定的最基本必要信息。关闭供应商日志记录会使 IDumpstateDevice::dumpstateBoard 仅将必要信息添加到错误报告中,而开启供应商日志记录则会包含 OEM 选择的任何信息。

您可以修改 dumpstate.cpp(它调用 IDumpstateDevice HAL 方法),例如,增加为 dumpstateBoard 完成操作提供的超时时间。但是,dumpstate.cpp 的核心逻辑应保持不变。

超时可以是任何值,但不应大幅增加完成错误报告所需的时间。特别是,DumpstateMode::CONNECTIVITY 对时间高度敏感,需要尽可能快地运行,以收集所有相关的调制解调器/Wi-Fi/网络日志。

验证

IDumpstateDevice 实现有一个 VTS 测试,并且通用 BugreportManager 功能有功能单元测试。

推荐的手动测试用例是 frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java