无忧启动论坛

标题: 请教efi格式究竟是个什么东西? [打印本页]

作者: 今朝醉Aresword    时间: 2022-10-12 18:26
标题: 请教efi格式究竟是个什么东西?
网上资料都找遍了,萌新还搞不懂下面几个问题,如果有大佬能够帮忙解答,不胜感激!

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风格的,能够跑起来,能够管理文件,能够绘制一点简单的图案就可以了。
作者: wintoflash    时间: 2022-10-12 18:26
本帖最后由 wintoflash 于 2022-10-12 18:53 编辑

你问的这些问题,都可以在 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: ubmp.7z.001.zip (4 MB, 下载次数: 38) ubmp.7z.002.zip (4 MB, 下载次数: 27) ubmp.7z.003.zip (4 MB, 下载次数: 21) ubmp.7z.004.zip (4 MB, 下载次数: 27) ubmp.7z.005.zip (4 MB, 下载次数: 30) ubmp.7z.006.zip (56.78 KB, 下载次数: 16) (去.zip扩展名,用7z解压)

如果你用的是 Rust,参考 https://docs.rs/uefi/latest/uefi/

作者: 邪恶海盗    时间: 2022-10-12 18:35
我记得UEFI是开源的,你可以下载源码和开发文档研究一下,我相信能找到解决方法...
作者: 今朝醉Aresword    时间: 2022-10-12 19:01
wintoflash 发表于 2022-10-12 18:43
你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。
https://uefi.org/specifications
PDF: https ...

谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当时没搞好)。我现在先用 C++ 把整个流程都熟悉一下吧,非常感谢你的回答,你的回答很有用!
作者: wintoflash    时间: 2022-10-12 19:06
详细地说下这个问题:
萌新想手搓一个操作系统,当然不是 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
作者: wintoflash    时间: 2022-10-12 19:07
今朝醉Aresword 发表于 2022-10-12 19:01
谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当 ...

熟悉 C++ 的话,建议研究下 EDK2。https://github.com/tianocore/edk2
作者: 9527sss    时间: 2022-10-12 20:16
wintoflash 发表于 2022-10-12 18:43
你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。
https://uefi.org/specifications
PDF: https ...


感谢分享
作者: ldg_2    时间: 2022-10-13 09:10
长见识了,回答都好专业
作者: gtc    时间: 2022-10-13 10:31
凑个热闹,我属于那种看不懂的人
作者: szycool    时间: 2022-10-13 11:39
今朝醉Aresword 发表于 2022-10-12 19:01
谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当 ...


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

wintoflash大神!
作者: 2010techon    时间: 2022-10-13 13:13
本帖最后由 2010techon 于 2022-10-13 13:15 编辑

基本上就是Intel的EFI规范,可以说是一套硬件相关的标准接口定义
Extensible Firmware Interface
https://www.intel.com/content/ww ... ral-technology.html
作者: cduser    时间: 2022-10-13 15:16
果然有大神。
作者: nbcd2011    时间: 2022-10-13 15:19
efi格式都不清楚的话,手搓一个操作系统的难度有点大。
作者: allex1625    时间: 2022-10-13 15:31
新手,一起跟大神们学习。
作者: 2013abcdefg    时间: 2022-10-14 15:05
建议手搓一个bootx64.efi.实在
作者: wcs    时间: 2022-10-14 15:14
很专业的问题。学习了
作者: szwp    时间: 2022-10-14 16:41
能搓个dos.efi么
作者: xiao878    时间: 2022-10-14 18:39
帮顶,楼主很有远大理想
作者: 今朝醉Aresword    时间: 2022-10-15 13:26
差不多了,今天已经是周六了。我看了一下,wintoflash大佬的回答最专业最详细,所以最佳答案就是他的了。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3