Add product.img support to launcher
Require that the build provides a product.img, which is basically a
split off part of the system image, and pass it down to the vm_manager
at launch time.
Bug: 129163131
Bug: 126036177
Change-Id: I213f9516c13668f442c1cccf8a31b67d113c50f1
diff --git a/host/commands/launch/flags.cc b/host/commands/launch/flags.cc
index 3f62a50..1387f30 100644
--- a/host/commands/launch/flags.cc
+++ b/host/commands/launch/flags.cc
@@ -91,6 +91,7 @@
DEFINE_string(system_image_dir, vsoc::DefaultGuestImagePath(""),
"Location of the system partition images.");
DEFINE_string(vendor_image, "", "Location of the vendor partition image.");
+DEFINE_string(product_image, "", "Location of the product partition image.");
DEFINE_bool(deprecated_boot_completed, false, "Log boot completed message to"
" host kernel. This is only used during transition of our clients."
@@ -223,6 +224,9 @@
std::string default_metadata_image = FLAGS_system_image_dir + "/metadata.img";
SetCommandLineOptionWithMode("metadata_image", default_metadata_image.c_str(),
google::FlagSettingMode::SET_FLAGS_DEFAULT);
+ std::string default_product_image = FLAGS_system_image_dir + "/product.img";
+ SetCommandLineOptionWithMode("product_image", default_product_image.c_str(),
+ google::FlagSettingMode::SET_FLAGS_DEFAULT);
return true;
}
@@ -348,6 +352,7 @@
tmp_config_obj.set_data_image_path(FLAGS_data_image);
tmp_config_obj.set_vendor_image_path(FLAGS_vendor_image);
tmp_config_obj.set_metadata_image_path(FLAGS_metadata_image);
+ tmp_config_obj.set_product_image_path(FLAGS_product_image);
tmp_config_obj.set_dtb_path(FLAGS_dtb);
tmp_config_obj.set_gsi_fstab_path(FLAGS_gsi_fstab);
@@ -642,7 +647,7 @@
for (const auto& file :
{config->system_image_path(), config->vendor_image_path(),
config->cache_image_path(), config->data_image_path(),
- config->metadata_image_path()}) {
+ config->metadata_image_path(), config->product_image_path()}) {
if (!cvd::FileHasContent(file.c_str())) {
LOG(ERROR) << "File not found: " << file;
exit(cvd::kCuttlefishConfigurationInitError);
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index 2c4ba95..af690ed 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -93,6 +93,7 @@
const char* kDataImagePath = "data_image_path";
const char* kVendorImagePath = "vendor_image_path";
const char* kMetadataImagePath = "metadata_image_path";
+const char* kProductImagePath = "product_image_path";
const char* kUsbV1SocketName = "usb_v1_socket_name";
const char* kVhciPort = "vhci_port";
const char* kUsbIpSocketName = "usb_ip_socket_name";
@@ -359,6 +360,14 @@
SetPath(kMetadataImagePath, metadata_image_path);
}
+std::string CuttlefishConfig::product_image_path() const {
+ return (*dictionary_)[kProductImagePath].asString();
+}
+void CuttlefishConfig::set_product_image_path(
+ const std::string& product_image_path) {
+ SetPath(kProductImagePath, product_image_path);
+}
+
std::string CuttlefishConfig::dtb_path() const {
return (*dictionary_)[kDtbPath].asString();
}
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index 75dbddc..668badc 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -135,6 +135,9 @@
std::string metadata_image_path() const;
void set_metadata_image_path(const std::string& metadata_image_path);
+ std::string product_image_path() const;
+ void set_product_image_path(const std::string& product_image_path);
+
std::string dtb_path() const;
void set_dtb_path(const std::string& dtb_path);
diff --git a/host/libs/vm_manager/cf_qemu.sh b/host/libs/vm_manager/cf_qemu.sh
index ac63bbe..e037c3c 100755
--- a/host/libs/vm_manager/cf_qemu.sh
+++ b/host/libs/vm_manager/cf_qemu.sh
@@ -109,6 +109,8 @@
-device "virtio-blk-pci,scsi=off,drive=drive-virtio-disk3,id=virtio-disk3"
-drive "file=${metadata_image_path:-${HOME}/metadata.img},format=raw,if=none,id=drive-virtio-disk4,aio=threads"
-device "virtio-blk-pci,scsi=off,drive=drive-virtio-disk4,id=virtio-disk4"
+ -drive "file=${product_image_path:-${HOME}/product.img},format=raw,if=none,id=drive-virtio-disk5,aio=threads"
+ -device "virtio-blk-pci,scsi=off,drive=drive-virtio-disk5,id=virtio-disk5"
-netdev "tap,id=hostnet0,ifname=${wifi_tap_name:-${default_wifi_tap_name}},script=no,downscript=no"
-device "virtio-net-pci,netdev=hostnet0,id=net0"
-netdev "tap,id=hostnet1,ifname=${mobile_tap_name:-${default_mobile_tap_name}},script=no,downscript=no"
diff --git a/host/libs/vm_manager/crosvm_manager.cpp b/host/libs/vm_manager/crosvm_manager.cpp
index 2cee6b3..1605931 100644
--- a/host/libs/vm_manager/crosvm_manager.cpp
+++ b/host/libs/vm_manager/crosvm_manager.cpp
@@ -83,6 +83,7 @@
command.AddParameter("--rwdisk=", config_->cache_image_path());
command.AddParameter("--rwdisk=", config_->vendor_image_path());
command.AddParameter("--rwdisk=", config_->metadata_image_path());
+ command.AddParameter("--rwdisk=", config_->product_image_path());
command.AddParameter("--socket=", GetControlSocketPath(config_));
command.AddParameter("--android-fstab=", config_->gsi_fstab_path());
command.AddParameter("--single-touch=", config_->touch_socket_path(), ":",
diff --git a/host/libs/vm_manager/qemu_manager.cpp b/host/libs/vm_manager/qemu_manager.cpp
index d986833..bb8e0af 100644
--- a/host/libs/vm_manager/qemu_manager.cpp
+++ b/host/libs/vm_manager/qemu_manager.cpp
@@ -76,6 +76,7 @@
LogAndSetEnv("cache_image_path", config_->cache_image_path());
LogAndSetEnv("vendor_image_path", config_->vendor_image_path());
LogAndSetEnv("metadata_image_path", config_->metadata_image_path());
+ LogAndSetEnv("product_image_path", config_->product_image_path());
LogAndSetEnv("wifi_tap_name", config_->wifi_tap_name());
LogAndSetEnv("mobile_tap_name", config_->mobile_tap_name());
LogAndSetEnv("kernel_log_socket_name",