无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 318|回复: 16
打印 上一主题 下一主题

[分享] 支持各类文件系统的efishell模式efi文件

  [复制链接]
跳转到指定楼层
1#
发表于 昨天 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 110654 于 2025-12-17 11:52 编辑

原因:
已有一个U盘,安装了ventoy这个系统。默认数据分区是exfat文件系统。
我想给电脑主板刷个BIOS,去主板官方下载了一个支持efi模式的文件。查看了一下这个BIOS固件 ,其中一个有个.nsh的启动脚本
大多数厂家都是这样做的。edk2的官方efi模板shellpgk套件都是默认支持搜索当前目录的startup.nsh作为启动脚本。
但是问题来了。
由于厂家给的这个BOOTX64.efi (efishell.efi改名的),进去shell模式后,无法识别exfat分区的文件系统,就等于找不到这个脚本,因此就无法自动刷BIOS或者手动刷BIOS,即使这个文件ROM或者BIN固件文件放在你的U盘,
为了寻找解决方案,找到了
https://github.com/tianocore/edk2.githttps://github.com/pbatard/EfiFs.git
edk2是efi源码,EfiFs是各类文件系统驱动。官方的edk2默认只有fat文件系统。

于是我打包了一下,集成一个单一的.efi文件,实现启动这个efi文件进入shell模式后就能识别U盘,
当前只打包了x64构架的。其他构架的暂时没打包
此时有了这个efi文件对于BIOS 刷固件,可以手动执行了。不用再找个fat32分区的U盘而烦恼了。
默认已集成EfiFs这个源里面的全部文件系统,已测试12代平台ntfs文件系统没问题,其他系统暂时没测试。期待大家测试并反馈一下问题
比如铭瑄的BIOS:
@echo -off
set FileName MSMILESTONEH610MV3_E1.6D_11192025.ROM
set FilePath \efi\boot
for %a run (0 20)
fs%a:
cd %FilePath%
if exist %FileName% then
FPT -f %FileName%
goto End
end
if
end
for
echo Error: Bios not found.
:End
@echo -on

对于这个自动脚本,可以理解为他是用FPT.EFI -F 参数 执行对应的ROM文件。因此只需要复制FPT.EFI  + MSMILESTONEH610MV3_E1.6D_11192025.ROM 2个文件到U盘,
在ventoy中启动efishell-x694.efi后  FS0: 或者FS0-9 不同的数字代表不同的分区。
注意英文冒号来进入对应的U盘,可以通过ls 命令查看文件 是否就是U盘,
然后cd到对应的目录,执行FPT -f MSMILESTONEH610MV3_E1.6D_11192025.ROM  就开始刷BIOS了。
附件上传不了。。。


zip也试过了。

只能:
通过网盘分享的文件:efishell-x64.zip
链接: https://pan.baidu.com/s/1t6o2VhrEnsoFKZEPLUFU4Q?pwd=k5yc 提取码: k5yc 复制这段内容后打开百度网盘手机App,操作更方便哦
如果你也想打包驱动,
可以参考官方开源的说明文档:
Bonus: Commands to compile EfiFs using EDK2 on a vanilla Debian GNU/Linux 10.x
sudo apt install nasm uuid-dev gcc-multilib gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi gcc-riscv64-linux-gnugit clone --recurse-submodules https://github.com/tianocore/edk2.gitcd edk2make -C BaseToolsgit clone --recurse-submodules https://github.com/pbatard/EfiFs.git EfiFsPkgcd EfiFsPkg/grubgit apply ../0001-GRUB-fixes.patchcd -export GCC5_ARM_PREFIX=arm-linux-gnueabi-export GCC5_AARCH64_PREFIX=aarch64-linux-gnu-export GCC5_RISCV64_PREFIX=riscv64-linux-gnu-source edksetup.sh --reconfig./EfiFsPkg/set_grub_cpu.sh X64build -a X64 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc./EfiFsPkg/set_grub_cpu.sh IA32build -a IA32 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc./EfiFsPkg/set_grub_cpu.sh AARCH64build -a AARCH64 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc./EfiFsPkg/set_grub_cpu.sh ARMbuild -a ARM -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc./EfiFsPkg/set_grub_cpu.sh RISCV64build -a RISCV64 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc


其中需要注意EfiFsPkg 的Unicode排序协议版本使用的旧版本,而EDK2里面是新版本,因此需要
修改EfiFsPgk.dec 添加
[Protocols]
  # 兼容旧版本的Unicode排序协议定义
  gEfiUnicodeCollationProtocolGuid = {0xa4c751fc, 0x23ae, 0x4c3e, { 0x92, 0xe9, 0x49, 0x64, 0xcf, 0x63, 0xf3, 0x49 }}




也可以手动下载官方已编译好的文件系统驱动:
https://efi.akeo.ie/downloads/efifs-1.11/x64/#google_vignette
下载的这个文件能单独使用确实不太方便,对于U盘是fat32格式的用户来说,用途不大




评分

参与人数 1无忧币 +5 收起 理由
wintoflash + 5

查看全部评分

2#
发表于 昨天 11:36 | 只看该作者
学习了!!!
回复

使用道具 举报

3#
发表于 昨天 12:25 | 只看该作者
支持!
回复

使用道具 举报

4#
发表于 昨天 12:37 | 只看该作者
有意思,支持楼主了。
回复

使用道具 举报

5#
发表于 昨天 12:48 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
发表于 昨天 13:06 | 只看该作者
感谢分享
回复

使用道具 举报

7#
发表于 昨天 13:52 | 只看该作者
谢谢分享!
回复

使用道具 举报

8#
发表于 昨天 14:12 | 只看该作者
感谢分享!
回复

使用道具 举报

9#
发表于 昨天 14:42 | 只看该作者
好。。。。。。。
回复

使用道具 举报

10#
发表于 昨天 14:46 | 只看该作者
感谢分享
回复

使用道具 举报

11#
发表于 昨天 14:58 | 只看该作者
支持折腾
回复

使用道具 举报

12#
发表于 昨天 15:09 | 只看该作者
感谢分享
回复

使用道具 举报

13#
发表于 昨天 15:53 | 只看该作者
可以上传附件哦。。。

efishell-x64.zip

289.86 KB, 下载次数: 6, 下载积分: 无忧币 -2

回复

使用道具 举报

14#
发表于 昨天 16:38 | 只看该作者
感谢分享!
回复

使用道具 举报

15#
发表于 昨天 17:07 | 只看该作者
感谢分享!
回复

使用道具 举报

16#
发表于 昨天 18:32 | 只看该作者
感谢分享
回复

使用道具 举报

17#
发表于 昨天 19:29 | 只看该作者

感谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-12-18 00:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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