无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3942|回复: 19
打印 上一主题 下一主题

[求助] 请教efi格式究竟是个什么东西?

  [复制链接]
跳转到指定楼层
1#
发表于 2022-10-12 18:26:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
500无忧币
网上资料都找遍了,萌新还搞不懂下面几个问题,如果有大佬能够帮忙解答,不胜感激!

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风格的,能够跑起来,能够管理文件,能够绘制一点简单的图案就可以了。

最佳答案

查看完整内容

你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。 https://uefi.org/specifications PDF: https://uefi.org/sites/default/f ... 9_A_final_Aug29.pdf 必须。 对于可移动磁盘(例如U盘)是这样的。固定磁盘有另一套标准,详见 UEFI Spec。 PE格式,和 EXE 是一样的。你如果用 MSVC 编译器的话,指定 /SUBSYSTEM:EFI_APPLICATION,编译出来的就是 EFI 应用程序。 如果你想用 C/C++,可以参考 从零开始的UE ...
2#
发表于 2022-10-12 18:26:34 | 只看该作者
本帖最后由 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/

点评

wintoflash大神!  详情 回复 发表于 2022-10-13 13:06
感谢分享  详情 回复 发表于 2022-10-12 20:16
谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当时没搞好)。我现在先用 C++ 把整个流程都熟悉一下吧,非常感谢你的回答,你的回答很有用!  详情 回复 发表于 2022-10-12 19:01

评分

参与人数 3无忧币 +17 收起 理由
likeyouli + 5 我不得不表示我有些崇拜你了
sunsea + 10 很给力!
dfw9 + 2 赞一个!

查看全部评分

回复

使用道具 举报

3#
发表于 2022-10-12 18:35:49 | 只看该作者
我记得UEFI是开源的,你可以下载源码和开发文档研究一下,我相信能找到解决方法...
回复

使用道具 举报

4#
 楼主| 发表于 2022-10-12 19:01:11 | 只看该作者
wintoflash 发表于 2022-10-12 18:43
你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。
https://uefi.org/specifications
PDF: https ...

谢谢!我用的最熟的就是C++,我打算自己搓一个语言(我知道难度很大,我尝试这么做过,搞了一个礼拜,当时没搞好)。我现在先用 C++ 把整个流程都熟悉一下吧,非常感谢你的回答,你的回答很有用!

点评

熟悉 C++ 的话,建议研究下 EDK2。https://github.com/tianocore/edk2  详情 回复 发表于 2022-10-12 19:07
回复

使用道具 举报

5#
发表于 2022-10-12 19:06:51 | 只看该作者
详细地说下这个问题:
萌新想手搓一个操作系统,当然不是 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
回复

使用道具 举报

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

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

使用道具 举报

7#
发表于 2022-10-12 20:16:55 | 只看该作者
wintoflash 发表于 2022-10-12 18:43
你问的这些问题,都可以在 UEFI Spec 里面找到详细的解答。
https://uefi.org/specifications
PDF: https ...


感谢分享
回复

使用道具 举报

8#
发表于 2022-10-13 09:10:24 | 只看该作者
长见识了,回答都好专业
回复

使用道具 举报

9#
发表于 2022-10-13 10:31:30 | 只看该作者
凑个热闹,我属于那种看不懂的人
回复

使用道具 举报

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

回复

使用道具 举报

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

wintoflash大神!
回复

使用道具 举报

12#
发表于 2022-10-13 13:13:36 | 只看该作者
本帖最后由 2010techon 于 2022-10-13 13:15 编辑

基本上就是Intel的EFI规范,可以说是一套硬件相关的标准接口定义
Extensible Firmware Interface
https://www.intel.com/content/ww ... ral-technology.html
回复

使用道具 举报

13#
发表于 2022-10-13 15:16:21 | 只看该作者
果然有大神。
回复

使用道具 举报

14#
发表于 2022-10-13 15:19:59 | 只看该作者
efi格式都不清楚的话,手搓一个操作系统的难度有点大。
回复

使用道具 举报

15#
发表于 2022-10-13 15:31:09 | 只看该作者
新手,一起跟大神们学习。
回复

使用道具 举报

16#
发表于 2022-10-14 15:05:31 | 只看该作者
建议手搓一个bootx64.efi.实在
回复

使用道具 举报

17#
发表于 2022-10-14 15:14:55 | 只看该作者
很专业的问题。学习了
回复

使用道具 举报

18#
发表于 2022-10-14 16:41:45 来自手机 | 只看该作者
能搓个dos.efi么
回复

使用道具 举报

19#
发表于 2022-10-14 18:39:11 | 只看该作者
帮顶,楼主很有远大理想
回复

使用道具 举报

20#
 楼主| 发表于 2022-10-15 13:26:30 | 只看该作者
差不多了,今天已经是周六了。我看了一下,wintoflash大佬的回答最专业最详细,所以最佳答案就是他的了。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-13 01:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表