assembly 使用UEFI编写操作系统[已关闭]

j2qf4p5b  于 2023-08-06  发布在  其他
关注(0)|答案(3)|浏览(101)

已关闭。此问题需要更多focused。它目前不接受回答。
**希望改进此问题?**更新问题,使其仅针对editing this post的一个问题。

9年前关闭。
Improve this question
我最近没怎么写代码,但我决定重新开始操作系统开发。最近我听说了一个比BIOS更好的系统。我想为使用EFI而不是BIOS的平台开发一个操作系统。我不知道从何说起。有人能给我指个方向吗?坦率地说,我真的不知道EFI到底是什么。我真的迷路了,我很想听听你的意见。
谢啦,谢啦

rta7y2nd

rta7y2nd1#

EFI是UEFI的前身,这是人们实际使用的东西,尽管他们有时仍然称之为EFI。您可以在uefi.org中获取所涉及的规范。
UEFI规范定义了** Boot 加载程序**可能需要知道的所有内容。PI规范为芯片供应商定义了接口,以用于其代码在行业中的可移植性。所以你会听说像Win8这样的操作系统,需要遵守UEFI规范的某个版本,比如2.3.1c,才能使一些功能正常工作,比如安全 Boot 。所有这一切都表明EFI并没有取代BIOS,而是成为BIOS必须遵守的标准,以支持某些操作系统。
开始使用的地方是the TianoCore project on SourceForge(在获得规范副本之后)。其中一个项目是OVMF,它是UEFI的虚拟机目标。您可能还希望查看NT32目标,以便在Windows下运行命令提示符。当你想设计一个应用程序,比如一个 Boot 加载程序,它位于UEFI接口之上时,这些都是非常好的工具。
至于学习汇编,我不建议你从那里开始。有太多的东西要知道,我们创建UEFI的部分原因是为了让新程序员可以用C而不是ASM工作。在UEFI中有几个地方我们使用ASM,但是构建系统处理拼接的细节,并且您通常不需要对处理器的状态进行棘手的控制,也不需要通过编写ASM获得性能。你这样做的唯一其他原因是大小,因为BIOS的其余部分将在C中,它有点违背了目的,除非你用ASM重写整个东西,没有人会这样做。专注于学习规范以及如何使用它们来编写自己的UEFI应用程序。

5fjcxozz

5fjcxozz2#

这个问题的答案很晚,但我可以补充以下几点,如果你还没有发现他们在同一时间:
也许可以解释EFI对OS开发意味着什么
实际上,不是很多。也许有一点好吧,让我们解释一下。UEFI为预引导阶段提供固件环境。它还为操作系统提供一些运行时服务,但是,预计操作系统(而不是UEFI固件)最终将驱动系统-这些服务允许您执行各种引导配置相关活动-example
好处是,如果你准备使用一个符合multiboot 2的 Bootstrap ,你实际上不需要知道任何关于UEFI的事情- Bootstrap 将根据multiboot规范加载你,然后调用ExitBootServices(),这在UEFI术语中会破坏固件环境。
可以生成一个具有EFI存根的Linux内核,因此可以“不使用”引导加载程序this blog shows you how进行引导。您可以为您的内核做这件事-您只需要生成一个与固件位数匹配的PE/COFF内核。
也许可以告诉我什么样的测试环境(最好是虚拟的)我可以使用
如果你能负担得起VMWare Workstation,这将帮助你很大。除了包含一个gdb存根以便可以调试任何东西的任何部分之外,还可以编辑虚拟机定义文件(*.vmx)以包含

firmware="efi"

字符串
瞧,VMWare将 Boot 一个完全工作的UEFI环境。适用于Linux和Windows。
互联网上的各种帖子都提到了QEMU设置,当然还有VirtualBox。我从来没有在VirtualBox EFI平台上成功地引导过任何现有的系统,我也没有尝试过QEMU,尽管我相信它和其他各种模拟器可能会工作。
我还应该花时间研究ARM组装吗?
这取决于你的目标。关于汇编的问题,我认为你应该知道它来写一个操作系统。我不认为你为哪个平台写东西有什么关系--事实上,我认为为多个平台写东西会让你更欣赏机器之间的差异。
然而,一般来说,我不会尝试用汇编语言编写整个操作系统。这样做的主要原因是时间--我假设这是一个业余爱好项目,因此,为您的广泛努力获得一些奖励将比辛苦地尝试调试汇编(尤其是您不熟悉的汇编)有趣得多。当你变得更加熟练时,你总是可以用汇编程序代替选择位,特别是当你有足够的代码来测试它的时候。

d5vmydt9

d5vmydt93#

您可以使用qemu来进行一些uefi应用程序开发/测试。更多信息请参见this
除此之外,我强烈建议熟悉uefi,并尝试在uefi模型中做一些驱动程序/应用程序开发。您可以尝试从加载器运行网络堆栈、网络引导基础设施,可能还可以设置一个更整洁的操作系统前GUI。这不仅会使你擅长于欧足联,而且会帮助你了解具体的平台细节。
这是我的说法,但上面的评论是很好的铭记在心。

相关问题