"console = hvc0"カーネルパラメータを使用すると、Debian VMはQEMUから起動しません。

"console = hvc0"カーネルパラメータを使用すると、Debian VMはQEMUから起動しません。

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「y」の代わりに「m」を設定してカーネルを構築します。これは、virtio_console起動プロセスの最初にhvc0を使用できるようにinitrdにこのモジュールを含める必要があることを意味します。次のコマンドを実行して、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 -uroot として実行します。 initrdにvirtio_consoleモジュールを含める必要があり、再起動するとsystemdが自動的に起動します。[Eメール保護]

関連情報