"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: 문제는 데비안에만 존재합니다. Ubuntu, Fedora 및 openSUSE를 테스트했습니다. 부팅이 잘되고 hvc0유일한 콘솔로 구성되었습니다. 내가 테스트한 모든 배포판은 최신 "클라우드" ARM64 이미지입니다. 나는 debian-12-genericcloud 및 debian-11-genericcloud 이미지를 시도했지만 동일한 결과를 얻었습니다.

답변1

데비안(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 -u루트로 실행하십시오. 이제 initrd에 virtio_console 모듈이 포함되어야 하며 재부팅할 때 systemd가 자동으로 시작됩니다.[이메일 보호됨].

관련 정보