无忧启动论坛

标题: 支持各类文件系统的efishell模式efi文件 [打印本页]

作者: 110654    时间: 2025-12-17 11:16
标题: 支持各类文件系统的efishell模式efi文件
本帖最后由 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格式的用户来说,用途不大





作者: cc2025    时间: 2025-12-17 11:36
学习了!!!
作者: a66    时间: 2025-12-17 12:25
支持!
作者: chinaren12    时间: 2025-12-17 12:37
有意思,支持楼主了。
作者: xxp5201314    时间: 2025-12-17 12:48
谢谢分享
作者: smile_z    时间: 2025-12-17 13:06
感谢分享
作者: 孑然    时间: 2025-12-17 13:52
谢谢分享!
作者: it323    时间: 2025-12-17 14:12
感谢分享!
作者: cncecpcy    时间: 2025-12-17 14:42
好。。。。。。。
作者: 12qaz    时间: 2025-12-17 14:46
感谢分享
作者: wn168cn@163.com    时间: 2025-12-17 14:58
支持折腾
作者: win82    时间: 2025-12-17 15:09
感谢分享
作者: 2010sya    时间: 2025-12-17 15:53
可以上传附件哦。。。

efishell-x64.zip

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


作者: hhcha    时间: 2025-12-17 16:38
感谢分享!
作者: handsome_xiang    时间: 2025-12-17 17:07
感谢分享!
作者: rchc08    时间: 2025-12-17 18:32
感谢分享
作者: john138    时间: 2025-12-17 19:29

感谢分享
作者: ebaqiang    时间: 2025-12-18 08:51
驚為天人的神作,看了讓人熱血沸騰,感謝分享。
作者: jinghuanqd    时间: 2025-12-18 22:38
谢谢分享
作者: handsome_xiang    时间: 2025-12-20 15:41
感谢分享!
作者: 北极的冰山    时间: 2025-12-27 05:41
感谢分享赞你!
作者: 小龙飞    时间: 2026-1-12 14:22
感谢分享!
作者: weibs    时间: 2026-1-12 16:09
感谢分享!




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