从昨天开始,我无法再qemu
使用在我的笔记本电脑上编译的外部内核(运行 Arch Linux)启动。
如果我编译一个普通的 Linux 内核(版本 4.13,来自 Linus Torvalds 的 github 存储库),然后尝试以qemu
这种方式启动:
qemu-system-x86_64 --enable-kvm -boot c -kernel arch/x86/boot/bzImage
这将启动显示屏,显示每 2-3 秒刷新一次的 SeaBIOS 输出:
Booting from ROM...
Probing EDD (edd=off to disable)... ok
early console in extract_kernel
input_data: 0x0000000002c773b4
input_len: 0x000000000090c470
output: 0x0000000001000000
output_len: 0x000000000173a968
kernel_total_size: 0x00000000025a7000
Decompressing Linux... Parsing ELF...
如果我添加这些标志以qemu
启用 SeaBIOS 调试输出:
-chardev stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios
我得到这个不断重复的输出:https://pastebin.com/mZKeM6r5
有趣的是,如果我在另一台机器(运行 Debian)上使用相同的配置文件编译相同的内核并将其复制bzImage
到我的机器上,它就可以正常启动。所以我猜我的工具链中发生了一些事情。最近有更新gcc
,但是回到软件包的先前版本(我没有问题时的版本)并不能解决我的问题。
作为临时解决方法,我以为可以在 Debian 机器上使用distcc
避免来回复制文件进行编译,但问题仍然出现,所以我猜测问题出在编译过程的最后步骤(从链接到结束,因为这些发生在我的笔记本电脑上)。
附加信息:
gcc
我的笔记本电脑上的版本 (ArchLinux):8.2.0(pkg 版本 = 8.2.0-2)gcc
我的 Debian 机器上的版本:6.3.0(pkg 版本 = 4:6.3.0-4)
编辑:完成SeaBIOS输出