启动 GNU-EFI 后 qemu 挂起 os

qemu hangs after booting a GNU-EFI os

根据一篇文章https://wiki.osdev.org/GNU-EFI,我试图用 GNU-EFI 写一个“hello world”x86_64OS,但我 运行 遇到了一些问题.

当我使用以下命令启动 img 时

sudo qemu-system-x86_64 -drive file=$(BUILD_DIR)/$(OSNAME).img -m 256M -cpu qemu64 \
    -drive if=pflash,format=raw,unit=0,file="$(OVMF_DIR)/OVMF_CODE.fd",readonly=on \
    -drive if=pflash,format=raw,unit=1,file="$(OVMF_DIR)/OVMF_VARS.fd" \
    -net none

Qemu 在打印后挂起 Found bootloader on fs0:

我不知道是什么原因造成的。 我怀疑我在 Makefile 中犯了一些错误。 这是代码仓库:https://github.com/xubury/myos 用于重现。

顺便说一句,您可能需要在 Makefile 中指定 gnu-efiovmf 的路径。

我运行 OS下的代码:Arch Linux x86_64 and Kernel: 5.11.1-arch1-1

非常感谢!

所以,当我将 -lgnuefi -lefi 放在链接的末尾时,问题显然就消失了。但我不知道为什么。此外,对于某些 ABI 兼容性问题,应使用 uefi_call_warpper 调用 gnu-efi 函数。