이 도움말에서는 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
(또는 버그 보고서)가 시작되면 HAL을 프로세스 덤프에 포함할 수 있습니다.
설정 구성
SELinux 정책 구성
dump_extra_hal(hal_server_domain)
을 dumpstate.te
에 추가합니다.
dumpstate.te
가 vendor
sepolicy 폴더에 없으면 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을 자동차 워치독에 등록하려면 자동차 워치독을 참고하세요.