qemu-system-i386:在没有 PVH ELF 的情况下加载未压缩内核时出错注意

问题描述 投票:0回答:2

我正在尝试使用以下代码将我的操作系统启动到 qemu:

qemu-system-i386 -kernel MyOS/mykernel.elf

但我不断收到此错误:

qemu-system-i386: Error loading uncompressed kernel without PVH ELF Note

这是我用来构建的代码:

i686-elf-gcc -std=gnu99 -ffreestanding -g -c MyOS/start.s -o MyOS/start.o
i686-elf-gcc -std=gnu99 -ffreestanding -g -c MyOS/kernel.c -o MyOS/kernel.o
i686-elf-gcc -ffreestanding -nostdlib -g -T MyOS/linker.ld MyOS/start.o MyOS/kernel.o -o MyOS/mykernel.elf -lgcc
qemu-system-i386 -kernel MyOS/mykernel.elf

我的文件:

kernel.c/o

start.s/o

linker.ld

mykernel.elf

有人可以帮忙吗?如果您需要代码以防代码错误或其他问题,只需回复说明即可。

c++ c operating-system kernel qemu
2个回答
2
投票

尝试将其添加到命令行

-machine type=pc-i440fx-3.1

来源:https://forum.osdev.org/viewtopic.php?f=1&t=33638

或者看看这个 如何创建将由 qemu 运行的 PVH“内核”

希望这有帮助


0
投票

如果您尝试直接使用 qemu 的 -kernel 选项运行具有多重引导版本 2 的内核,也会发生同样的问题。

我只在 qemu 源代码中找到了对多重启动版本 1 的支持(qemu 票务跟踪器有一个关于此的问题:https://gitlab.com/qemu-project/qemu/-/issues/389)。

所以你可以:

  • 在您的内核中支持多重引导 v1 并使用 -kernel 选项加载它
  • 支持多重引导 v2(或其他)并将其加载到磁盘映像中,这要归功于带有 -hda 选项的 grub 等引导加载程序。例如
mkdir -p isodir/boot/grub
cp kernel isodir/boot/
printf "menuentry \"myos\" {\n\tmultiboot /boot/kernel\n}" > isodir/boot/grub/grub.cfg
grub-mkrescue -o disk.img isodir
qemu-system-i386 -hda disk.img

© www.soinside.com 2019 - 2024. All rights reserved.