QEMU 无法再启动本地构建的 Linux 内核

QEMU 无法再启动本地构建的 Linux 内核

从昨天开始,我无法再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输出

答案1

我有同样的问题。就我而言,这是由 binutils 更新到 2.31 引起的。从您发布问题的日期来看,您不太可能刚刚从 8 月 2 日安装了 arch linux binutils 更新到 2.31,这非常匹配。

你需要这次提交适用于 4.16 之前的内核。

binutils 2.31 更改了链接器 ( ld) 的默认值,使得默认值最大页面大小从 2MiB 减少到 4kiB。除非应用所述提交,否则此更改会破坏 x86_64 内核。

相关内容