VHAL 디버깅

이 도움말에서는 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.tevendorsepolicy 폴더에 없으면 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을 자동차 워치독에 등록하려면 자동차 워치독을 참고하세요.