我正在 QEMU 上运行带有参数的虚拟 Linux 机(debian12)-device virtconsole
。该论点补充说/dev/hvcX设备节点到VM。 QEMU 可以将该设备连接到主机上的 unix 套接字。如果我将“console=hvc0”参数传递给虚拟机的内核,我将在主机套接字上获得控制台,并可以在其上启动 tty。但是,只有当我与另一个控制台内核参数(例如 )一起配置时,它才有效console=ttyAMA0 console=hvc0
。问题是虚拟机不使用单个console=hvc0
内核参数启动。我错过了什么吗?整个QEMU命令:
qemu-system-aarch64 \
-M virt,accel=hvf,highmem=off \
-cpu host \
-smp 2 \
-m 2048 \
-display none \
-daemonize \
-monitor unix:/tmp/qemu-monitor-socket,server=on,wait=off \
-device virtio-serial-pci \
-chardev socket,path=/tmp/qemu-guest-tty,server=on,wait=off,id=guest-tty \
-device virtconsole,chardev=guest-tty \
-device virtio-net-pci,netdev=mynet0,mac=52:54:00:08:06:8b \
-netdev user,id=mynet0,hostfwd=tcp::22221-:22 \
-device virtio-blk-pci,drive=hda \
-drive file=~/qemu/debian/1-debian-12-genericcloud-arm64.qcow2,format=qcow2,discard=unmap,id=hda,if=none \
-cdrom ~/qemu/cloud-init/cloud-init.iso \
-kernel ~/qemu/debian/vmlinuz-6.1.0-9-cloud-arm64 \
-initrd ~/qemu/debian/initrd.img-6.1.0-9-cloud-arm64 \
-append 'root=/dev/vda1 ds=nocloud;h=debian1 console=hvc0'
UPD:问题仅存在于 Debian 中。我测试过 Ubuntu、Fedora 和 openSUSE - 它们正常启动并hvc0
配置为唯一的控制台。我测试过的所有发行版都是最新的“云”ARM64 映像。我尝试过 debian-12-genericcloud 和 debian-11-genericcloud 图像,结果相同。
答案1
Debian(12) 构建其内核时CONFIG_VIRTIO_CONSOLE
设置为“m”而不是“y”。这意味着您的 initrd 需要包含该virtio_console
模块,以便 hvc0 在引导过程中尽早可用。您可以通过运行以下命令来验证您的 initrd 是否具有所需的模块:
$ lsinitramfs `readlink -f /boot/initrd.img` | grep virtio_console
usr/lib/modules/6.1.0-11-arm64/kernel/drivers/char/virtio_console.ko
如果您没有看到该模块,请编辑/etc/initramfs-tools/modules
文件并添加一行“virtio_console”。然后update-initramfs -k all -u
以 root 身份运行。你的 initrd 现在应该包含 virtio_console 模块,当你重新启动时,systemd 将自动启动[电子邮件受保护]。