diff options
author | Hao Chen <chenhaosjtuacm@google.com> | 2020-06-23 23:21:28 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-23 23:21:28 +0000 |
commit | f8c98716c9765865b72f05de60eae15c06bab6d8 (patch) | |
tree | 033920f9bd7770e90adb6a413fb0df49c42c6d77 | |
parent | e405b74e23b3a25246dbd29adb76b4011fe61cd6 (diff) | |
parent | 12c9a65e09a69e0380bc83dcae9d588774ddea4b (diff) | |
download | cuttlefish-f8c98716c9765865b72f05de60eae15c06bab6d8.tar.gz |
Run VHAL server with launch_cvd am: 129471f5e9 am: 12c9a65e09
Original change: https://googleplex-android-review.googlesource.com/c/device/google/cuttlefish/+/11934089
Change-Id: Ic1767de1e47ed20414e89b4ac243ed6a2cfa24fa
-rw-r--r-- | host/commands/assemble_cvd/flags.cc | 8 | ||||
-rw-r--r-- | host/commands/run_cvd/kernel_args.cc | 6 | ||||
-rw-r--r-- | host/commands/run_cvd/launch.cc | 24 | ||||
-rw-r--r-- | host/commands/run_cvd/launch.h | 3 | ||||
-rw-r--r-- | host/commands/run_cvd/main.cc | 2 | ||||
-rw-r--r-- | host/libs/config/cuttlefish_config.cpp | 28 | ||||
-rw-r--r-- | host/libs/config/cuttlefish_config.h | 9 | ||||
-rw-r--r-- | host_package.mk | 1 |
8 files changed, 81 insertions, 0 deletions
diff --git a/host/commands/assemble_cvd/flags.cc b/host/commands/assemble_cvd/flags.cc index 5ce8e9981..d57e87173 100644 --- a/host/commands/assemble_cvd/flags.cc +++ b/host/commands/assemble_cvd/flags.cc @@ -169,6 +169,8 @@ DEFINE_string(logcat_mode, "", "How to send android's log messages from " "guest to host. One of [serial, vsock]"); DEFINE_bool(enable_tombstone_receiver, true, "Enables the tombstone logger on " "both the guest and the host"); +DEFINE_bool(enable_vehicle_hal_grpc_server, true, "Enables the vehicle HAL " + "emulation gRPC server on the host"); DEFINE_bool(use_bootloader, false, "Boots the device using a bootloader"); DEFINE_string(bootloader, "", "Bootloader binary path"); DEFINE_string(boot_slot, "", "Force booting into the given slot. If empty, " @@ -379,6 +381,10 @@ vsoc::CuttlefishConfig InitializeCuttlefishConfiguration( tmp_config_obj.set_tombstone_receiver_binary( vsoc::DefaultHostArtifactsPath("bin/tombstone_receiver")); + tmp_config_obj.set_enable_vehicle_hal_grpc_server(FLAGS_enable_vehicle_hal_grpc_server); + tmp_config_obj.set_vehicle_hal_grpc_server_binary( + vsoc::DefaultHostArtifactsPath("bin/android.hardware.automotive.vehicle@2.0-virtualization-grpc-server")); + tmp_config_obj.set_use_bootloader(FLAGS_use_bootloader); tmp_config_obj.set_bootloader(FLAGS_bootloader); @@ -414,6 +420,8 @@ vsoc::CuttlefishConfig InitializeCuttlefishConfiguration( instance.set_host_port(6520 + num - 1); instance.set_adb_ip_and_port("127.0.0.1:" + std::to_string(6520 + num - 1)); + instance.set_vehicle_hal_server_port(9210 + num - 1); + instance.set_device_title(FLAGS_device_title); instance.set_virtual_disk_paths({ diff --git a/host/commands/run_cvd/kernel_args.cc b/host/commands/run_cvd/kernel_args.cc index 60a53dd70..af77420f1 100644 --- a/host/commands/run_cvd/kernel_args.cc +++ b/host/commands/run_cvd/kernel_args.cc @@ -87,6 +87,12 @@ std::vector<std::string> KernelCommandLineFromConfig(const vsoc::CuttlefishConfi kernel_cmdline.push_back("androidboot.force_normal_boot=1"); } + if (config.enable_vehicle_hal_grpc_server() && instance.vehicle_hal_server_port()) { + constexpr int vehicle_hal_server_cid = 2; + kernel_cmdline.push_back(concat("androidboot.vendor.vehiclehal.server.cid=", vehicle_hal_server_cid)); + kernel_cmdline.push_back(concat("androidboot.vendor.vehiclehal.server.port=", instance.vehicle_hal_server_port())); + } + // TODO(b/158131610): Set this in crosvm instead kernel_cmdline.push_back(concat("androidboot.wifi_mac_address=", mac_to_str(instance.wifi_mac_address()))); diff --git a/host/commands/run_cvd/launch.cc b/host/commands/run_cvd/launch.cc index e34303bbb..93d600fb9 100644 --- a/host/commands/run_cvd/launch.cc +++ b/host/commands/run_cvd/launch.cc @@ -340,3 +340,27 @@ void LaunchSocketVsockProxyIfEnabled(cvd::ProcessMonitor* process_monitor, GetOnSubprocessExitCallback(config)); } } + +void LaunchVerhicleHalServerIfEnabled(const vsoc::CuttlefishConfig& config, + cvd::ProcessMonitor* process_monitor) { + if (!config.enable_vehicle_hal_grpc_server()) { + return; + } + + cvd::Command grpc_server(config.vehicle_hal_grpc_server_binary()); + auto instance = config.ForDefaultInstance(); + + const unsigned vhal_server_cid = 2; + const unsigned vhal_server_port = instance.vehicle_hal_server_port(); + const std::string vhal_server_power_state_file = + cvd::AbsolutePath(instance.PerInstancePath("power_state")); + const std::string vhal_server_power_state_socket = + cvd::AbsolutePath(instance.PerInstancePath("power_state_socket")); + + grpc_server.AddParameter("--server_cid=", vhal_server_cid); + grpc_server.AddParameter("--server_port=", vhal_server_port); + grpc_server.AddParameter("--power_state_file=", vhal_server_power_state_file); + grpc_server.AddParameter("--power_state_socket=", vhal_server_power_state_socket); + process_monitor->StartSubprocess(std::move(grpc_server), + GetOnSubprocessExitCallback(config)); +} diff --git a/host/commands/run_cvd/launch.h b/host/commands/run_cvd/launch.h index 7acbf1db5..0a8756f53 100644 --- a/host/commands/run_cvd/launch.h +++ b/host/commands/run_cvd/launch.h @@ -50,3 +50,6 @@ LogcatServerPorts LaunchLogcatReceiverIfEnabled(const vsoc::CuttlefishConfig& co StreamerLaunchResult LaunchWebRTC(cvd::ProcessMonitor* process_monitor, const vsoc::CuttlefishConfig& config); + +void LaunchVerhicleHalServerIfEnabled(const vsoc::CuttlefishConfig& config, + cvd::ProcessMonitor* process_monitor); diff --git a/host/commands/run_cvd/main.cc b/host/commands/run_cvd/main.cc index 01b7a446b..b45b22c12 100644 --- a/host/commands/run_cvd/main.cc +++ b/host/commands/run_cvd/main.cc @@ -427,6 +427,8 @@ int main(int argc, char** argv) { auto tombstone_server = LaunchTombstoneReceiverIfEnabled(*config, &process_monitor); auto tombstone_kernel_args = KernelCommandLineFromTombstone(tombstone_server); + LaunchVerhicleHalServerIfEnabled(*config, &process_monitor); + // The streamer needs to launch before the VMM because it serves on several // sockets (input devices, vsock frame server) when using crosvm. StreamerLaunchResult streamer_config; diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp index 1b1403b9a..cc9a000af 100644 --- a/host/libs/config/cuttlefish_config.cpp +++ b/host/libs/config/cuttlefish_config.cpp @@ -125,6 +125,10 @@ const char* kWebRTCAssetsDir = "webrtc_assets_dir"; const char* kWebRTCPublicIP = "webrtc_public_ip"; const char* kWebRTCEnableADBWebSocket = "webrtc_enable_adb_websocket"; +const char* kEnableVehicleHalServer = "enable_vehicle_hal_server"; +const char* kVehicleHalServerBinary = "vehicle_hal_server_binary"; +const char* kVehicleHalServerPort = "vehicle_hal_server_port"; + const char* kRestartSubprocesses = "restart_subprocesses"; const char* kRunAdbConnector = "run_adb_connector"; const char* kAdbConnectorBinary = "adb_connector_binary"; @@ -575,6 +579,14 @@ void CuttlefishConfig::MutableInstanceSpecific::set_vnc_server_port(int vnc_serv (*Dictionary())[kVncServerPort] = vnc_server_port; } +int CuttlefishConfig::InstanceSpecific::vehicle_hal_server_port() const { + return (*Dictionary())[kVehicleHalServerPort].asInt(); +} + +void CuttlefishConfig::MutableInstanceSpecific::set_vehicle_hal_server_port(int vehicle_hal_server_port) { + (*Dictionary())[kVehicleHalServerPort] = vehicle_hal_server_port; +} + void CuttlefishConfig::set_enable_webrtc(bool enable_webrtc) { (*dictionary_)[kEnableWebRTC] = enable_webrtc; } @@ -591,6 +603,22 @@ std::string CuttlefishConfig::webrtc_binary() const { return (*dictionary_)[kWebRTCBinary].asString(); } +void CuttlefishConfig::set_enable_vehicle_hal_grpc_server(bool enable_vehicle_hal_grpc_server) { + (*dictionary_)[kEnableVehicleHalServer] = enable_vehicle_hal_grpc_server; +} + +bool CuttlefishConfig::enable_vehicle_hal_grpc_server() const { + return (*dictionary_)[kEnableVehicleHalServer].asBool(); +} + +void CuttlefishConfig::set_vehicle_hal_grpc_server_binary(const std::string& vehicle_hal_server_binary) { + (*dictionary_)[kVehicleHalServerBinary] = vehicle_hal_server_binary; +} + +std::string CuttlefishConfig::vehicle_hal_grpc_server_binary() const { + return (*dictionary_)[kVehicleHalServerBinary].asString(); +} + void CuttlefishConfig::set_webrtc_assets_dir(const std::string& webrtc_assets_dir) { (*dictionary_)[kWebRTCAssetsDir] = webrtc_assets_dir; } diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h index 45c15e1f3..c99ecf186 100644 --- a/host/libs/config/cuttlefish_config.h +++ b/host/libs/config/cuttlefish_config.h @@ -193,6 +193,12 @@ class CuttlefishConfig { void set_webrtc_enable_adb_websocket(bool enable); bool webrtc_enable_adb_websocket() const; + void set_enable_vehicle_hal_grpc_server(bool enable_vhal_server); + bool enable_vehicle_hal_grpc_server() const; + + void set_vehicle_hal_grpc_server_binary(const std::string& vhal_server_binary); + std::string vehicle_hal_grpc_server_binary() const; + void set_restart_subprocesses(bool restart_subprocesses); bool restart_subprocesses() const; @@ -284,6 +290,8 @@ class CuttlefishConfig { public: std::string serial_number() const; int vnc_server_port() const; + // Port number to connect to the vehicle HAL server on the host + int vehicle_hal_server_port() const; int host_port() const; std::string adb_ip_and_port() const; std::string adb_device_name() const; @@ -341,6 +349,7 @@ class CuttlefishConfig { public: void set_serial_number(const std::string& serial_number); void set_vnc_server_port(int vnc_server_port); + void set_vehicle_hal_server_port(int vehicle_server_port); void set_host_port(int host_port); void set_adb_ip_and_port(const std::string& ip_port); void set_device_title(const std::string& title); diff --git a/host_package.mk b/host_package.mk index 8b9196fec..419e0c544 100644 --- a/host_package.mk +++ b/host_package.mk @@ -19,6 +19,7 @@ webrtc_files_path := usr/share/webrtc cvd_host_executables := \ adb \ adbshell \ + android.hardware.automotive.vehicle@2.0-virtualization-grpc-server \ launch_cvd \ lpmake \ lpunpack \ |