- 固件
- CLI
- 嵌入式
【免费下载链接】UEFI-Shell
UEFI Shell binary images, generated from EDK2 stable
UEFI-Shell 是 EDK2 官方 UEFI Shell 的自动化构建发布项目,它的核心亮点正是EDK2 submodule 版本锁定机制:把上游源码精确钉死在一个公开 commit 上,让每一个发布的 UEFI Shell 二进制都能被任何人公开验证,确保构建源码永远可追溯、可复现。🔐
先认识 UEFI-Shell:从 EDK2 stable 源码到可启动 ISO
UEFI Shell 是 UEFI 固件环境下的命令行工具,是调试 BIOS/UEFI、启动诊断设备、检查 Secure Boot 状态的常用工具。UEFI-Shell 项目做的事情很纯粹:
- 只从官方 EDK2 stable 版本源码构建 UEFI Shell;
- 产出可启动 ISO(内含
EFI/BOOT/BOOT*.EFI,覆盖 X64、IA32、AARCH64、RISCV64、LOONGARCH64 五大架构); - 同时提供单独的
.efi二进制,可直接拷到 FAT 分区使用。
项目本身没有业务代码,它的"产品"是信任:你拿到的每一个二进制,都可以被证明只来自公开的 EDK2 源码。👇 而这份信任的基石,就是 EDK2 submodule 版本锁定。
💡 本地快速上手:
git clone --recursive https://gitcode.com/gh_mirrors/ue/UEFI-Shell(--recursive会按 gitlink 拉取锁定版本的 EDK2 源码,与官方构建完全一致)
为什么必须锁定 EDK2 版本:不锁版本就无法证明"来自公开源码"
如果不锁定上游版本,"这个二进制是从哪份源码构建的?"将永远是个无法回答的问题:
- 分支会移动:若只写"用 EDK2 main 分支构建",main 每天在变,今天构建与明天构建用的源码完全不同,事后无法复现;
- 无法自证清白:发布者可能用一份"看起来像官方"的私有源码偷偷加入恶意代码,外部无从验证;
- 构建不可复现:第三方无法用同一份源码重新构建出同样的结果。
📌 26H1 版本锁定情况:EDK2 commitb7a715f7c03c45c6b4575bf88596bfd79658b8ce(tagedk2-stable202605,经git describe --tags确认),锁定方式即下文详述的 gitlink 机制。
版本锁定之后,"构建用的源码是哪个公开 commit"变成一个可查证的事实——这正是 UEFI-Shell 全部验证机制的起点。
EDK2 submodule 如何锁定到精确 commit:gitlink 机制详解
UEFI-Shell 把 EDK2 作为Git submodule纳入管理,锁定由两部分共同完成:
.gitmodules 声明上游来源
.gitmodules 只有 3 行,声明了子模块的路径和上游仓库地址:
[submodule "edk2"] path = edk2 url = https://github.com/tianocore/edk2.git它回答的是"edk2 目录来自哪里"——即上游是官方 EDK2 仓库,而非某个第三方魔改版。
gitlink 把版本钉死在一个 commit 上
但仅声明上游还不够,真正"锁版本"的是gitlink:主仓库把edk2目录存成一个特殊条目,mode 为160000(子模块指针),commit字段直接指向一个精确的 SHA-1:
$ git ls-tree HEAD edk2 160000 commit b7a715f7c03c45c6b4575bf88596bfd79658b8ce edk2这意味着:
- 无论 EDK2 上游后续如何演进,UEFI-Shell 的每次构建必然使用这一份完全相同的源码;
- 该 commit 是 EDK2 公开仓库中的真实提交,任何人 checkout 同一个 SHA-1 即得到逐字节一致的源码树;
- 用 git submodule status 可查到完整 SHA-1:
$ git submodule status -b7a715f7c03c45c6b4575bf88596bfd79658b8ce edk2而构建时执行的git --git-dir edk2/.git describe --tags(见 linux_gcc_edk2.yml L57)会反查出edk2-stable202605这样的 tag 名,这就是发布版本号里 EDK2 标签的来源——tag 只是人类友好的别名,被锁死的始终是那个精确 commit。🎯
CI 自动化构建:从锁定 commit 到 SHA-256 输出的完整链路
锁定只是第一步。linux_gcc_edk2.yml 定义了一条全自动、可公开审计的构建流水线,由推送 tag 触发(L3-L6):
- 递归检出子模块:Checkout repository and submodules 步骤以
submodules: recursive+fetch-depth: 0检出主仓库和锁定的 EDK2 commit(完整历史是为了能解析 EDK2 stable tag); - 记录版本信息:Set version 步骤从源码头文件读取 Shell 版本,用
git describe --tags记录 edk2 tag,连同构建日期一并写入 ISO 内的说明文件; - 交叉编译全部架构:用 EDK2 官方 BaseTools 编译 X64、IA32、AARCH64、RISCV64、LOONGARCH64 × DEBUG/RELEASE 共 10 个二进制,并把 edk2 tag 注入供应商字符串(L69)——任何平台启动它,都会自报"由哪个 EDK2 版本构建";
- 生成 ISO 并输出 SHA-256:打包为 El-Torito 可启动 ISO,随后 Display SHA-256 步骤打印全部产物的 SHA-256,构建日志会完整记录这份"指纹清单"。
如何一步步验证发布的 UEFI Shell 二进制
锁定机制的最终价值,体现在 README.md "Binary validation" 章节给出的验证清单上。其逻辑核心是:SHA-1 commit 哈希无法被伪造——每个 commit 的 SHA-1 由其内容、父提交与作者信息共同哈希而来,要造出两个不同内容却同为某个特定 SHA-1 的 commit,在算力上不可行。因此,只要构建所用的 commit 是公开的、子模块指向的 EDK2 commit 也是公开的,整条链就任何人都能独立复核。✅
📋 完整验证流程(对应 README.md 的官方清单):
- 在 Actions 构建记录中定位你所下载 ISO 对应的那次构建 run;
- 查看
Checkout repository and submodules步骤最后一行,得到构建所用主仓库 commit 的 SHA-1; - 确认该 SHA-1 对应主仓库中的一个公开 commit(排除"隐藏 commit 触发构建"的可能);
- 打开该 commit 的文件树,点击
edk2 @ …子模块链接,确认它指向 EDK2 上游的一个公开 commit(排除"私有魔改源码"的可能); - 审查该 commit 中的 CI 工作流 yml,确认构建步骤没有任何"丢弃产物、替换为第三方下载文件"之类的可疑操作;
- 从构建日志的
Display SHA-256步骤提取全部产物的 SHA-256,与你下载的.efi/.iso实际计算值逐一比对。
走完这套流程,你得到的结论是绝对的:发布的二进制只可能由公开、未修改的 EDK2 源码构建而来。而且由于任何一环被伪造都极易被检测,即使你不亲自验证,社区里也总有人盯着——这就是公开可验证机制的威慑力。
关于版本锁定的常见问题 FAQ
SHA-1 真的不可能伪造吗?
对 git commit 而言,SHA-1 是对内容、父提交与作者信息的 20 字节哈希。要伪造一个"内容不同但恰好等于某个指定 SHA-1"的 commit,需要针对该特定哈希值做碰撞攻击(约需 2^80 量级计算),对任何人都不可行。🔒
既然已经锁定 submodule,为什么还要 SHA-256 校验?
两者防的东西不同:锁定保证"源码可追溯到公开 commit",SHA-256 保证"发布页上的文件就是这次构建真正产出的文件"(防止发布文件被事后替换)。缺少任何一环,信任链都不完整。
构建日志超过 3 个月保留期怎么办?
项目为半年一次发布,而构建日志保留 3 个月,因此始终存在一个可公开验证的窗口期:下载最新一次仍在保留期内的构建产物即可。
总结:一条人人可复核的信任链
🧭 用一张表回顾 UEFI-Shell 的 EDK2 submodule 版本锁定核心机制:
| 环节 | 文件 | 作用 |
|---|---|---|
| 声明上游来源 | .gitmodules | edk2 来自官方 EDK2 仓库 |
| 锁定精确 commit | 主仓库 gitlink(mode 160000) | 每次构建源码完全一致、可复现 |
| 自动构建 + 版本记录 + SHA-256 | .github/workflows/linux_gcc_edk2.yml | 全程自动化、可审计、留指纹 |
| 验证清单 | README.md | 任何人均可独立复核 |
💬 公开 commit + 锁定子模块 + 可审计的 CI + SHA-256 校验,四个环节都允许第三方独立复核——任何一环被伪造都极易暴露。这套组合拳,就是"构建源码永远公开可验证"的真正含义,也值得所有发布预编译二进制的开源项目借鉴。
- 固件
- CLI
- 嵌入式
【免费下载链接】UEFI-Shell
UEFI Shell binary images, generated from EDK2 stable
相关推荐
Umi-OCR 快速上手:免费离线OCR软件,3步搞定截图、批量与PDF识别
Umi OCR 快速上手:免费离线OCR软件,3步搞定截图、批量与PDF识别 Umi OCR 是一款免费的离线文字识别软件,在 Windows 和 Linux
桌面应用OCR计算机视觉Swift大数运算最佳实践:BigInt在金融与密码学中的应用
Swift大数运算最佳实践:BigInt在金融与密码学中的应用 BigInt是一个基于纯Swift实现的任意精度算术库,为开发者提供了处理超出标准数据类型范围的
终极指南:如何使用mise版本锁定确保构建环境的完全可重复性
终极指南:如何使用mise版本锁定确保构建环境的完全可重复性 在软件开发过程中,环境一致性是确保团队协作顺畅和构建结果可重复的关键因素。mise作为一款强大的开
开发工具CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考