本文介紹瞭如何在開發 VHAL 時獲取調試信息:
- 轉儲 VHAL 的當前狀態。
- 在 dumpstate 中包含 VHAL 進程轉儲。
當兩者都啟用時,每個項目都包含在adb bugreport
中。
此外,通過註冊汽車看門狗,如果狀態不佳,可以檢索運行時 VHAL 狀態。
轉儲 VHAL 調試信息
為 IVehicle.hal 實現調試
IVehicle::debug
在調用lshal debug <interface> <options>
時被調用。您可以轉儲 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
dumpstate.te
文件夾中不存在 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 進程
要捕獲系統狀態調用,請調用adb shell dumpstate
statusCall
adb bugreport
。輸出將包含指定 HAL 接口的進程轉儲。
啟用汽車看門狗來監控 VHAL 運行狀況
Car watchdog 監控註冊客戶端的健康狀態,並在註冊客戶端變得不健康時轉儲或終止註冊客戶端。要將 VHAL 註冊到汽車看門狗,請參閱汽車看門狗。