本文介绍了如何在开发 VHAL 时获取调试信息:
- 转储 VHAL 的当前状况。
- 在 dumpstate 中添加 VHAL 进程转储。
如果这两种方法均采用,adb bugreport
会同时包含二者。
此外,还可通过注册到汽车监控定时器来检索状况不佳的运行时 VHAL。
转储 VHAL 调试信息
实现对 IVehicle.hal 的调试
调用 lshal debug
<interface> <options>
时,系统会调用 IVehicle::debug
。您可以转储 VHAL 的内部状况,也可以根据选项对 VHAL 执行所需的操作。
Return<void> VehicleHal::debug(const hidl_handle& handle, const hidl_vec<hidl_string>& options) { if (handle.getNativeHandle() == nullptr || handle->numFds < 1) { ALOGE("Invalid parameters passed to debug()"); return Void(); } int fd = handle->data[0]; // Process options if (options.size() == 0) { dump_VHAL_state(fd); return Void(); } std::string option = options[0]; if (EqualsIgnoreCase(option, "--help")) { print_out_help(fd); } else if (EqualsIgnoreCase(option, "--whateveroption")) { do_whatever_needed(fd, option); } else { dprintf(fd, "Invalid option: %s\n", option.c_str()); } return Void(); }
转储 VHAL
使用 lshal
转储 VHAL。需要具有系统特权。
shell$ adb shell lshal debug android.hardware.automotive.vehicle@2.0::IVehicle
在 dumpstate 中添加 HAL 进程转储
在 Android 10 QPR2 版本中,可在启动 dumpstate
(或 bugreport)时将 HAL 包含在进程转储中。
设置配置
配置 SELinux 政策
在 dumpstate.te
中添加 dump_extra_hal(hal_server_domain)
。如果 vendor
sepolicy 文件夹中没有 dumpstate.te
,请创建 dumpstate.te
。
shell$ cat dumpstate.te dump_extra_hal(hal_vendor_special_control) dump_extra_hal(hal_vendor_display_power)
列出 HAL 接口
将 HAL 接口名称添加到系统属性 ro.dump.hals.extra
中。名称有多个时,请将其以英文逗号分隔。Android.mk
或产品 makefile
是存储这些名称的最佳位置。
shell$ % cat vendor_product.mk PRODUCT_PROPERTY_OVERRIDES += \ ro.dump.hals.extra=vendor.company.hardware.special.control@1.0::ISpecialControl,vendor.company.hardware.power.displaypower@1.0::IDisplayPower
转储 HAL 进程
要获取系统 statusCall
,请调用 adb shell dumpstate
或 adb bugreport
。输出会包含特定 HAL 接口的进程转储。
启用汽车监控定时器以监控 VHAL 的运行状况
汽车监控定时器可监控已注册客户端的运行状况,并在已注册客户端的运行状况不佳时将其转储或终止。如需将 VHAL 注册到汽车监控定时器,请参阅汽车监控定时器。