这个问题的答案较晚,但如果您同时还没有发现它们,我可以添加以下几点:
或许可以解释一下 EFI 对操作系统开发的意义
其实,不多。好吧,也许有一点。好吧,让我们解释一下。UEFI 为预引导阶段提供固件环境。它还为操作系统提供了一些运行时服务,但是,预计操作系统,而不是 UEFI 固件,最终将驱动系统 - 这些服务允许您执行各种与引导配置相关的活动 -示例。
好处是,如果您准备使用符合多重引导 2的引导加载程序,您实际上不需要了解有关 UEFI 的任何信息 - 引导加载程序将根据多重引导规范加载您,然后ExitBootServices()
在 UEFI 术语中调用它会破坏固件环境。
可以生成一个具有 EFI 存根的 Linux 内核,因此可以“不使用”引导加载程序进行引导 -这个博客向您展示了如何使用. 您可以为您的内核执行此操作 - 您只需要生成一个与固件位数匹配的 PE/COFF 内核。
也许告诉我我可以使用哪些测试环境(最好是虚拟的)
如果您负担得起VMWare Workstation,这将极大地帮助您。除了包含 gdb 存根以便您可以调试任何部分,您还可以编辑虚拟机定义文件 (*.vmx) 以包含
firmware="efi"
瞧,VMWare 将启动一个完全正常工作的 UEFI 环境。适用于 Linux 和 Windows。
互联网上的各种帖子都提到了 QEMU 设置,当然还有 VirtualBox。我从来没有亲自在 VirtualBox EFI 平台上成功启动过任何现有系统,也没有尝试过 QEMU,尽管我相信它和其他各种模拟器可能都可以工作。
我还应该花时间研究 ARM 组装吗?
这取决于你的目标。关于汇编的问题,我想你应该知道它来写一个操作系统。我认为您编写哪个平台并不重要 - 事实上,我认为为多个平台编写将使您更加欣赏机器之间的差异。
但是,一般来说,我不会尝试用汇编语言编写整个操作系统。这样做的主要原因是时间——我认为这是一个爱好项目,因此为您的大量努力获得一些奖励将比尝试调试程序集(尤其是您不熟悉的程序集)更有趣。随着您变得更加熟练,您总是可以用汇编程序替换选择位,特别是当您有足够的其余代码来测试它时。