Merge "Use virtio-console for the serial devices"
diff --git a/microdroid/Android.bp b/microdroid/Android.bp
index d0f3b66..3665687 100644
--- a/microdroid/Android.bp
+++ b/microdroid/Android.bp
@@ -232,7 +232,15 @@
},
x86_64: {
kernel_prebuilt: ":kernel_prebuilts-5.10-x86_64",
- cmdline: microdroid_boot_cmdline + ["acpi=noirq"],
+ cmdline: microdroid_boot_cmdline + [
+ // console=none is to work around the x86 specific u-boot behavior which when
+ // console= option is not found in the kernel commandline console=ttyS0 is
+ // automatically added. By adding console=none, we can prevent u-boot from doing
+ // that. Note that console is set to hvc0 by bootconfig if the VM is configured as
+ // debuggable.
+ "console=none",
+ "acpi=noirq",
+ ],
},
},
diff --git a/microdroid/bootconfig.full_debuggable b/microdroid/bootconfig.full_debuggable
index f6afdcf..0d0457c 100644
--- a/microdroid/bootconfig.full_debuggable
+++ b/microdroid/bootconfig.full_debuggable
@@ -3,6 +3,7 @@
# Kernel message is exported.
kernel.printk.devkmsg=on
+kernel.console=hvc0
# ADB is supported and rooting is possible. Note that
# ro.adb.secure is still 0 (see build.prop) which means that adbd is started
diff --git a/microdroid/bootconfig.x86_64 b/microdroid/bootconfig.x86_64
index 75e4a80..20d64f7 100644
--- a/microdroid/bootconfig.x86_64
+++ b/microdroid/bootconfig.x86_64
@@ -1 +1 @@
-androidboot.boot_devices = pci0000:00/0000:00:01.0,pci0000:00/0000:00:02.0,pci0000:00/0000:00:03.0
+androidboot.boot_devices = pci0000:00/0000:00:02.0,pci0000:00/0000:00:03.0,pci0000:00/0000:00:04.0
diff --git a/virtualizationservice/src/crosvm.rs b/virtualizationservice/src/crosvm.rs
index 38e5bf3..4844657 100644
--- a/virtualizationservice/src/crosvm.rs
+++ b/virtualizationservice/src/crosvm.rs
@@ -238,12 +238,25 @@
command.arg("--mem").arg(memory_mib.to_string());
}
- if let Some(log_fd) = config.log_fd {
+ // Setup the serial devices.
+ // 1. uart device: used as the output device by bootloaders and as early console by linux
+ // 2. virtio-console device: used as the console device
+ //
+ // When log_fd is not specified, the devices are attached to sink, which means what's written
+ // there is discarded.
+ //
+ // Warning: Adding more serial devices requires you to shift the PCI device ID of the boot
+ // disks in bootconfig.x86_64. This is because x86 crosvm puts serial devices and the block
+ // devices in the same PCI bus and serial devices comes before the block devices. Arm crosvm
+ // doesn't have the issue.
+ let backend = if let Some(log_fd) = config.log_fd {
command.stdout(log_fd);
+ "stdout"
} else {
- // Ignore console output.
- command.arg("--serial=type=sink");
- }
+ "sink"
+ };
+ command.arg(format!("--serial=type={},hardware=serial", backend));
+ command.arg(format!("--serial=type={},hardware=virtio-console", backend));
// Keep track of what file descriptors should be mapped to the crosvm process.
let mut preserved_fds = config.indirect_files.iter().map(|file| file.as_raw_fd()).collect();