c++ qemu-system-i386:加载未压缩的内核时出错(没有PVH ELF)

l0oc07j2  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(206)

我试图用以下代码将我的操作系统 Boot 到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


任何人都可以帮助?如果你需要的代码,以防万一,如果它的代码的错误或东西,只是回复说。

bwitn5fc

bwitn5fc1#

尝试将其添加到命令行

-machine type=pc-i440fx-3.1

字符串
来源:https://forum.osdev.org/viewtopic.php?f=1&t=33638
或者看看这个How can I create a PVH "kernel" that will be run by qemu
希望这有帮助

ecfsfe2w

ecfsfe2w2#

如果您尝试使用qemu的-kernel选项直接运行multiboot版本2的内核,也会发生同样的问题。
我只在qemu源代码中找到了对多引导版本1的支持(qemu ticket tracker有一个关于这个的问题:https://gitlab.com/qemu-project/qemu/-/issues/389)。
因此,您可以:

  • 在内核中支持multiboot v1并使用-kernel选项加载它
  • 支持multiboot 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

字符串

相关问题