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 ポリシーの構成

dumpstate.tedump_extra_hal(hal_server_domain) を追加します。 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 を車のウォッチドッグに登録するには、車のウォッチドッグをご覧ください。