Debugowanie VHAL

W tym artykule wyjaśniono, jak uzyskać informacje o debugowaniu podczas opracowywania VHAL:

  • Zrzuć aktualny stan VHAL.
  • Uwzględnij zrzut procesu VHAL w stanie zrzutu.

Gdy oba są włączone, każdy element jest uwzględniany w adb bugreport .

Ponadto, rejestrując się w samochodowym watchdogu , można uzyskać status runtime VHAL, jeśli nie jest w dobrym stanie.

Zrzuć informacje debugowania VHAL

Zaimplementuj debugowanie dla IVehicle.hal

IVehicle::debug jest wywoływana, gdy wywoływany jest lshal debug <interface> <options> . Możesz zrzucić stan wewnętrzny VHAL lub podjąć wymagane działania w VHAL na podstawie opcji.

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();
}

Zrzuć VHAL

Użyj lshal , aby zrzucić VHAL. Potrzebne są uprawnienia systemowe.

shell$ adb shell lshal debug android.hardware.automotive.vehicle@2.0::IVehicle

Uwzględnij zrzut procesu HAL w stanie zrzutu

W wersji Android 10 QPR2 warstwy HAL mogą być uwzględnione w zrzucie procesu po zainicjowaniu stanu zrzutu (lub dumpstate ).

Konfiguracja konfiguracji

Skonfiguruj politykę SELinux

Dodaj dump_extra_hal(hal_server_domain) w dumpstate.te . Jeśli dumpstate.te nie istnieje w folderze vendor sepolicy, utwórz dumpstate.te .

shell$ cat dumpstate.te
dump_extra_hal(hal_vendor_special_control)
dump_extra_hal(hal_vendor_display_power)

Wyświetlanie listy interfejsów HAL

Dodaj nazwy interfejsów HAL do właściwości systemowej ro.dump.hals.extra . Liczne nazwy są oddzielone przecinkami. Android.mk lub product makefile to optymalne lokalizacje dla tych elementów.

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

Zrzuć procesy HAL

Aby przechwycić statusCall systemu, wywołaj adb shell dumpstate lub raport błędów adb bugreport . Dane wyjściowe będą zawierać zrzut procesu określonych interfejsów HAL.

Włącz watchdog samochodu, aby monitorować stan VHAL

Watchdog samochodu monitoruje stan kondycji zarejestrowanych klientów i zrzuca lub przerywa zarejestrowanych klientów, gdy stają się niesprawni. Aby zarejestrować VHAL w systemie nadzoru samochodu, zobacz Car Watchdog .