![在 QEMU 中启动未压缩的 vmlinux 内核而不是 bzImage](https://linux22.com/image/1595125/%E5%9C%A8%20QEMU%20%E4%B8%AD%E5%90%AF%E5%8A%A8%E6%9C%AA%E5%8E%8B%E7%BC%A9%E7%9A%84%20vmlinux%20%E5%86%85%E6%A0%B8%E8%80%8C%E4%B8%8D%E6%98%AF%20bzImage.png)
这个问题之前已经问过,但没有回答。
我正在尝试启动未压缩的 RTEMS ELF 文件
> qemu-system-x86_64 -kernel ./rtems-elf.exe
结果是
qemu-system-x86_64: Error loading uncompressed kernel without PVH ELF Note
我已经为 rtems RTOS 构建了许多内核,但为了进行完整性检查,我尝试从 rtems 启动一个示例,因此理想情况下代码应该没有问题。我还尝试启动未压缩的 Linux 内核(实时和常规),但出现了同样的错误。
一些有用的信息:
> file rtems-elf.exe
hello.exe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, with debug_info, not stripped
> qemu-system-x86_64 --version
QEMU emulator version 4.0.0
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
主机 - Arch linux x86_64
其他一些尝试:
这个例子是一个带有 PREEMPT_RT Linux 补丁的实时 Linux 内核,我有 bzImage,但我只是测试了 qemu 启动非压缩内核的能力
> file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=fd95cdeb00595f6742b0a41eda4f0c33172588fe, not stripped
> qemu-system-x86_64 -kernel ./vmlinux -append "--console=/dev/com1" -serial stdio -vga cirrus
qemu-system-x86_64: Error loading uncompressed kernel without PVH ELF Note
谢谢,如果我遗漏了什么请告诉我
同一主题的另一个帖子可以在这里找到 https://stackoverflow.com/questions/55688241/qemu-error-loading-uncompressed-kernel-without-pvh-elfnote 但这是一个断开的链接
和这里 QEMU:加载未压缩的内核时出错 但这个问题还没有得到回答,我想我应该再次提起它
答案1
QEMU >= 4.0 能够使用 PVH 标头启动 x86_64 ELF 映像。
Linux >= 4.21 提供了一个配置标志(CONFIG_PVH=y
必须在 Linux 配置文件中启用)以在 vmlinux ELF 映像中启用该标题。
量子计算单元需要在 x86/HVM 直接启动 ABI 中定义的 PVH 入口点启动 x86_64 ELF 映像。x86/HVM 直接启动 ABI 最初是为 Xen 客户机开发的,但随着 QEMU 和 Linux 的最新变化,QEMU 能够使用相同的入口点来启动 KVM 客户机。