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