使用UEFI编写操作系统

时间:2012-10-16 22:18:21

标签: assembly cpu-architecture osdev efi uefi

由于上学原因,我最近没有编码,但我决定再次开始从事OS开发工作。最近我听说EFI作为BIOS的替代品。我想为使用EFI而不是BIOS的平台开发操作系统。我无法确定从哪里开始。谁能指出我正确的方向?也许解释一下EFI对OS开发的意义,也许可以告诉我可以使用哪些测试环境(最好是虚拟的)。坦率地说,我真的不确定EFI到底是什么。我也应该花时间研究ARM组装吗?我知道x86组装,但我觉得这也已经过时了。我真的迷路了,我很想听听你的意见。

由于

3 个答案:

答案 0 :(得分:27)

EFI是UEFI的前身,这是人们实际使用的东西,尽管他们有时仍然称之为EFI。您可以在uefi.org获取相关规范。

UEFI规范定义了引导加载程序可能需要知道的所有内容。 PI规范定义了硅供应商用于在行业中实现其代码可移植性的接口。因此,您将听到一个操作系统,如Win8,要求符合特定版本的UEFI规范,如2.3.1c,以便使某些功能正常工作,如安全启动。所有这一切都说EFI不会取代BIOS,因为它已成为BIOS必须遵守的标准,以支持某些操作系统。

开始的地方(在获得规范的副本之后)是the TianoCore project on SourceForge。其中一个项目是OVMF,它是UEFI的虚拟机目标。您可能还想查看在Windows下运行命令提示符的NT32目标。当您想要设计一个位于UEFI接口之上的应用程序(如引导加载程序)时,这些是非常好的工具。

就学习集会而言,我不建议你从那里开始。有太多要知道,我们创建UEFI的部分原因是新程序员可以在C而不是ASM中工作。 UEFI中有一些我们使用ASM的地方,但是构建系统处理拼接的细节,你通常不需要处理器状态的棘手控制或者从编写处理器时获得的性能。 ASM。你要做的唯一另一个原因是尺寸,并且由于BIOS的其余部分将在C中,除非你在ASM中重写整个事情,否则它将失去目的,这是没有人会做的。专注于学习规范以及如何使用它们编写自己的UEFI应用程序。

答案 1 :(得分:10)

这个问题的答案很晚,但如果你没有在同一时间发现它们,我可以补充以下几点:

  

也许解释一下EFI对OS开发的意义

实际上,并不是很多。好吧也许一点点。好的,我们来解释一下。 UEFI为预启动阶段提供固件环境。它还为操作系统提供了一些运行时服务,但是,预计操作系统而不是UEFI固件最终将驱动系统 - 这些服务允许您执行各种与引导配置相关的活动 - example。 / p>

好处是,如果您准备使用符合说multiboot 2的引导加载程序,您实际上不需要了解任何有关UEFI的信息 - 引导加载程序将根据多引导规范加载您,然后调用ExitBootServices()以UEFI术语破坏固件环境。

可以生成一个具有EFI存根的Linux内核,因此可以“启动”而无需启动加载程序 - this blog shows you how。您可以为内核执行此操作 - 您只需生成与固件位数相匹配的PE / COFF内核。

  

也许告诉我我可以用什么测试环境(最好是虚拟的)

如果你负担得起VMWare Workstation,这将对你有很大的帮助。除了包含gdb存根以便您可以调试任何部分,还可以编辑虚拟机定义文件(* .vmx)以包含

firmware="efi"

并且,VMWare将启动一个完全正常工作的UEFI环境。适用于Linux和Windows。

互联网上的各种帖子提到QEMU设置,当然还有VirtualBox。我从来没有亲自在VirtualBox EFI平台上成功启动任何现有系统,我没有尝试过QEMU,虽然我相信它和其他各种模拟器可能都有效。

  

我是否应该花时间研究ARM组装?

这取决于你的目标。关于汇编问题,我认为你应该知道写一个操作系统。我认为你写的是哪个平台并不重要 - 事实上,我认为写多篇文章会让你更加欣赏机器之间的差异。

但是,一般情况下,我不会尝试在汇编中编写整个操作系统。这个的主要原因是时间 - 我认为这是一个爱好项目,所以获得一些奖励你的广泛努力将比试图调试组件,特别是你不熟悉的组件更有趣。随着您变得更加熟练,您可以随时使用汇编程序替换选择位,尤其是当您有足够的其余代码来进行测试时。

答案 2 :(得分:1)

您可以使用qemu进行一些uefi应用程序开发/测试。有关详细信息,请参阅this

除此之外,我强烈建议您熟悉uefi并尝试在uefi模型中进行一些驱动程序/应用程序开发。你可以尝试从加载器,网络引导基础设施运行网络堆栈,可能会设置一个更整洁的操作系统前GUI。这不仅可以让你擅长uefi,还可以帮助你理解平台特定的细节。

这就是我的发言,但上面的评论很好记住。