我这样启动linux内核:
~ $ qemu-system-i386 -k en-gb -m 8G -smp cpus=6 -kernel ./bzImage-5.10-184 -initrd ./initrd -accel kvm -append 'boot_delay=100'
如果没有boot_delay参数,我的启动会在 1.6 秒后停止(我使用该参数本身以某种方式看不到内核日志)。但事实是,在某个时刻,内核破坏了帧缓冲区,因此 dmesg 的一个重要部分消失了 - 弹出“Call Trace:”的部分,这是有关驱动程序中错误的信息。我只看到了其中的一小部分,最后。这段代码表明错误出在 AMD 的某些驱动程序中,但具体是哪一个 - 我不知道。所以,我看到这样的事情:
[ 3.257577] ? init_amd+097b/0xa10
[ 3.257577] ? report_bug+0x94/0xd0
...
[ 3.257577] ---[ end trace 15543f21cc7c6b0c ] ---
[ 113.810033] kvm-guest: steal time: CPU 1, msr 34a84c40
但我想查看调用跟踪的开头,以便知道问题出在哪个特定驱动程序中,通常是这样写的:
Error at drivers/rtl8192eu/rtl8192eu.c:
问题:如何使用 QEMU 模拟 UART 并将整个内核日志准确地输出到“前额”,而不是输出到损坏的帧缓冲区中?嗯,是的,5.10.184 内核不支持 pstore_blk,并且在 5.15 内核上它对我不起作用,即使它包含在该内核中......
应该像这样运行:
'console=ttyS0'将内核日志重定向到UART,并将-serial stdio该日志直接输出到终端。