请教efi格式究竟是个什么东西?

查看 271|回复 16
作者:szycool   
网上资料都找遍了,萌新还搞不懂下面几个问题,如果有大佬能够帮忙解答,不胜感激!
1. 在UEFI启动下,efi文件是必须的吗?
比如说我U盘现在装好了ubuntu 22.04,我把其中的 .efi 后缀的文件全部删掉,是否就没办法启动ubuntu了
2.一定要使用 bootx64.efi 启动吗?
刚刚我试了用grubx64.efi,好像也能启动的样子,界面进去了,还打开了一个扫雷(我用rufus弄的,似乎自带三个efi,还有一个是mmx64.efi)
3. efi 文件怎么来的?efi 格式的结构是什么?
我一直最大的困惑就是这个。有没有那种类似 .png 文件格式详解,把文件的结构都讲清楚,我是萌新,都搞不懂 efi 文件是怎么来的,怎么生成的,结构是什么。如果有人有这方面的资料,不胜感激。
萌新想手搓一个操作系统,当然不是 win10 那种,没有那么好高骛远,就像 dos 那样,cmd风格的,能够跑起来,能够管理文件,能够绘制一点简单的图案就可以了。

文件, 结构, 大佬

nbcd2011   
我记得UEFI是开源的,你可以下载源码和开发文档研究一下,我相信能找到解决方法...
allex1625   
   
你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。
https://uefi.org/specifications
PDF: https://uefi.org/sites/default/f ... 9_A_final_Aug29.pdf
1. 在UEFI启动下,efi文件是必须的吗
必须。
2.一定要使用 bootx64.efi 启动吗
对于可移动磁盘(例如U盘)是这样的。固定磁盘有另一套标准,详见 UEFI Spec。
3. efi 文件怎么来的?efi 格式的结构是什么
PE格式,和 EXE 是一样的。你如果用 MSVC 编译器的话,指定 /SUBSYSTEM:EFI_APPLICATION,编译出来的就是 EFI 应用程序。
萌新想手搓一个操作系统,当然不是 win10 那种,没有那么好高骛远,就像 dos 那样,cmd风格的,能够跑起来,能够管理文件,能够绘制一点简单的图案就可以了。
如果你想用 C/C++,可以参考 从零开始的UEFI裸机编程
如果因为网络原因看不了,可以下载 PDF: (去.zip扩展名,用7z解压)
如果你用的是 Rust,参考 https://docs.rs/uefi/latest/uefi/
allex1625   

wintoflash 发表于 2022-10-12 18:43
你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。
https://uefi.org/specifications
PDF: https ...

谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当时没搞好)。我现在先用 C++ 把整个流程都熟悉一下吧,非常感谢你的回答,你的回答很有用!
allex1625   
详细地说下这个问题:
萌新想手搓一个操作系统,当然不是 win10 那种,没有那么好高骛远,就像 dos 那样,cmd风格的,能够跑起来,能够管理文件,能够绘制一点简单的图案就可以了。
目前可以用 C/C++/Rust 语言来搞 UEFI 开发。
C 的话有两套工具可以使用,EDK2 和 gnu-efi。
EDK2:https://github.com/tianocore/edk2
可以参考 戴正华 的《UEFI原理与编程》或者 罗冰 的《UEFI编程实现》。这两本书可以在淘宝/京东上买得到。
EDK2 带一个 C 标准库,还支持用 C++ 来开发。缺点是比较复杂,我个人来说不太喜欢。
gnu-efi:各 Linux 发行版都可以通过包管理来安装。缺点是 bug 比较多。
如果这两个东西都不合你意,你可以用 mingw 直接编译成 PE 格式可执行文件,或者用一些奇技淫巧把 ELF 转成 PE。https://wiki.osdev.org/UEFI
nbcd2011   

今朝醉Aresword 发表于 2022-10-12 19:01
谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当 ...

熟悉 C++ 的话,建议研究下 EDK2。https://github.com/tianocore/edk2
nbcd2011   

wintoflash 发表于 2022-10-12 18:43
你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。
https://uefi.org/specifications
PDF: https ...

感谢分享
allex1625   
长见识了,回答都好专业
allex1625   
凑个热闹,我属于那种看不懂的人
allex1625   

今朝醉Aresword 发表于 2022-10-12 19:01
谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当 ...

您需要登录后才可以回帖 登录 | 立即注册

返回顶部