20

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

谢谢

4

3 回答 3

28

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

UEFI 规范定义了引导加载程序可能需要知道的所有内容。PI 规范为芯片供应商定义了接口,用于在行业中实现其代码的可移植性。因此,您会听说诸如 Win8 之类的操作系统需要符合特定版本的 UEFI 规范(例如 2.3.1c)才能使某些功能(例如安全启动)正常工作。所有这一切都表明,EFI 并没有完全取代 BIOS,而是成为 BIOS 必须遵守以支持某些操作系统的标准。

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

至于学习汇编,我不建议你从那里开始。要知道的东西太多了,我们创建 UEFI 的部分原因是为了让新程序员可以使用 C 而不是 ASM。在 UEFI 中有几个地方我们使用 ASM,但是构建系统会处理拼接的细节,而且您通常不需要对处理器状态进行棘手的控制,也不需要通过编写ASM。您这样做的唯一其他原因是大小,并且由于 BIOS 的其余部分将在 C 中,除非您在 ASM 中重写整个内容,否则它有点违背目的,没有人会这样做。专注于学习规范以及如何使用它们来编写自己的 UEFI 应用程序。

于 2012-10-17T05:17:03.667 回答
10

这个问题的答案较晚,但如果您同时还没有发现它们,我可以添加以下几点:

或许可以解释一下 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 组装吗?

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

但是,一般来说,我不会尝试用汇编语言编写整个操作系统。这样做的主要原因是时间——我认为这是一个爱好项目,因此为您的大量努力获得一些奖励将比尝试调试程序集(尤其是您不熟悉的程序集)更有趣。随着您变得更加熟练,您总是可以用汇编程序替换选择位,特别是当您有足够的其余代码来测试它时。

于 2013-04-26T14:43:46.580 回答
1

您可以使用 qemu 进行一些 uefi 应用程序开发/测试。看到这个了解更多信息

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

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

于 2013-08-15T01:04:45.793 回答