这个问题以前曾被问过,但没有得到解答。
我正在尝试启动未压缩的 RTEMS ELF 文件
> qemu-system-x86_64 -kernel ./rtems-elf.exe
Run Code Online (Sandbox Code Playgroud)
结果是
qemu-system-x86_64: Error loading uncompressed kernel without PVH ELF Note
Run Code Online (Sandbox Code Playgroud)
我已经为 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
Run Code Online (Sandbox Code Playgroud)
> qemu-system-x86_64 --version
QEMU emulator version 4.0.0
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
Run Code Online (Sandbox Code Playgroud)
主机 - 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
Run Code Online (Sandbox Code Playgroud)
谢谢,如果我错过了什么,请告诉我
此处找到同一主题的另一个线程 /sf/ask/3898176901/ 但这是一个损坏的链接
这里 QEMU: Error loading uncompressed kernel 但这还没有得到解答,我想我会再次提出它
小智 5
QEMU >= 4.0 能够使用 PVH 标头启动 x86_64 ELF 映像。
Linux >= 4.21 提供了一个配置标志(CONFIG_PVH=y必须在 Linux 配置文件中启用)以在 vmlinux ELF 映像中启用该标头。
QEMU需要 x86/HVM 直接启动 ABI 中定义的 PVH 入口点来启动 x86_64 ELF 映像。x86/HVM 直接启动 ABI 最初是为 Xen 来宾开发的,但随着 QEMU 和 Linux 的最新更改,QEMU 能够使用相同的入口点来启动 KVM 来宾。