qemu guest vm에서 호스트로 dmesg 출력을 인쇄하는 방법

qemu guest vm에서 호스트로 dmesg 출력을 인쇄하는 방법

주문하다
이게 내가 하는 일이야

# Step 1. In host machine
$ qemu-system-x86_64 \
        -enable-kvm -nodefaults -nographic -L /usr/share/qemu \
        -m 8G -smp 4 -boot c \
        -netdev user,hostnet0,hostfwd=tcp::5556-:22 \
        -drive file=ubuntu18.04.qcow2,if=virtio,cache=none \
        -device virtio-net-pci,netdev=hostnet0,id=net0,bus=pci.0,addr=0x3\
        -serial pty  

# Step 2. In guest machine
$ sudo vim /etc/default/grub
# Change GRUB_CMDLINE_LINUX="" as GRUB_CMDLINE_LINUX="console=ttyS0"

# Step 3. In host machine
# There should be a printed log showing 
# which pty is being used when the host runs qemu
# Let say, /dev/pts/3
$ sudo cat /dev/pts/3 

# Step 4. Login /dev/pts/3
$ echo "id" > /dev/pts/3
$ echo "password" > /dev/pts/3

# Step 5. Print dmesg in a log file
$ echo dmesg > /dev/pts/3

내가 원하는 것은 게스트 머신에서 커널 로그를 얻는 것입니다. 위의 코드는 기본적으로 pty를 직렬 포트로 사용하므로 특정 tty를 통해 로그를 가져올 수 있지만 문제는 이 방법에 주의할 점이 있다는 것입니다.

명령을 실행하면 dmesg다음 메시지가 나타납니다.

[ 0.00000] serial8250: too much work for irq4

심각한 경고는 아닌 것 같은데 보기에도 짜증나고, 여러 로그가 무시되고 있는 것 같습니다.

가상 머신에서 경고 없이 로그를 가져오는 더 좋은 방법이 있는지 궁금합니다. 내 생각엔 이 경고가 잘못된 것 같아. 제가 이 문제를 해결한 방법은 정기적으로 로그인하여 uu를 리디렉션하는 것이었습니다 cat.

echo dmesg를 사용하지 않고 즉시 로그를 얻을 수 있는 방법이 있나요?

답변1

선택하다

# Using a named pipeline
# Step 1. qemu configuration
$ qemu-system-x86_64 \
        -some options like above \
        -serial pipe:/tmp/guest

# Step 2. To get a log
$ mkfifo /tmp/guest.in /tmp/guest.out
$ cat /tmp/guest.out
$ printf "id\n" > /tmp/guest.in
$ printf "pw\n" > /tmp/guest.in
$ printf "cmd\n" > /tmp/guest.in

협회

답변2

게스트 커널 매개변수를 -serial file:console.log추가 qemu-system하고 추가 할 수 있습니다 .console=ttyS0,115200 ignore_loglevel

를 사용하면 ignore_loglevel모든 커널 메시지가 로그 수준에 관계없이 콘솔(여기서는 직렬 장치)에 인쇄됩니다.

관련 정보