启动 GNU-EFI 操作系统后 qemu 挂起

问题描述

我试图根据一篇文章使用 gnu-efi 编写“hello world”x86_64 操作系统:https://wiki.osdev.org/GNU-EFI,但我遇到了一些问题。

当我使用以下命令启动 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,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 和 Kernel: 5.11.1-arch1-1 下运行代码

非常感谢!

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...