UEFI 随笔 009 — 在 UEFI Shell 下使用 USB 盘
声明:个人笔记,概不负责
此乃水文一篇,属于用户篇,非开发篇。漫天都有类似文章,这里只是另一篇水。
在 UEFI Shell 下使用 USB 盘
启动到 UEFI Shell
创建 UEFI Shell 启动盘
在 UEFI Shell 下使用 USB 盘
如果 系统可以启动到 UEFI Shell 下,输入这两条命令
map -u
map fs*
fs9: # 不要照抄,这是举例 (这是 手机模型,不是真手机)
第一条命令,用于刷新 UEFI Shell 下,对设备的快速访问 短名 映射表。
这玩意貌似不会随着你热插拔 USB 盘,自动更新;但如果你是捅着启动的,可能早已建立。
总之,但凡混乱了,最保险的做法就是,启动到 UEFI Shell 后,无脑的插拔一次 USB 盘,再无脑的刷一次。
(很容易乱啊,你干一半时,被打扰干其他事去了)
第二条命令,用于列出所有 fs 开头的 设备短名,USB 盘 会在其中。
然后,在 map fs* 打出的清单里,找带 USB 字眼的行。
如果只有一行,那其短名 就是 USB 盘;如果有好几行,那就一个个试。
fs 后的编号是随机分配的,不保证的。
第三条命令,用于切到那个 盘。(接下来的,超出本文范围)
// TODO 给个例子
那么,怎么用这个 U 盘呢? 有两种用法:从上面运行 UEFI Application;在上面玩弄 文件。
UEFI Application 可以随便放,可以放 U 盘里,也可以弄到 UEFI 里一起放。
// TODO 补充个 重定向概念。
启动到 UEFI Shell
简单的讲,这个依赖 刷在机器上的 UEFI 版本。
通常 Debug 开发版的 UEFI 会自带这个启动项,
而最终客户版的 UEFI 不会带这个启动项。
若是一个版本号话,要注意区分 里面的 debug/release 标记。
UEFI Application 不保证可以在 release 上运行成功,
因为跑 the Test UEFI app 的话,所依赖的资源,可能只有 debug 版上才有
就看你刷的什么版本了。
如果是最终 客户版 UEFI ,还是有机会启动到 UEFI Shell —— 接着读。
创建 UEFI Shell 启动盘
如果机器可以从外部存储设备启动,比如 USB 盘,那么还是有机会暴力启动到 UEFI Shell
首先,需要在 UEFI 设置菜单里关闭安全选项,Sercue Boot 之类,主动打开大门。
第二,做一个 UEFI Shell 启动盘,启动时从那个盘启动。
第一条没啥 安全担心的,因为你要开发啊,不能以安全之名,禁 开发之权限啊。这种安全,要他干嘛?
第二条非常简单,照着 UEFI spec 定义,造个目录,放个文件就行。按如下步骤进行
造盘盘
首先,把 U 盘格式成 FAT32 分区。如果 U 盘上有几个分区,随便找个分区是 FAT32 就行。
吹毛求疵的讲,FAT16 也行,FAT12 也行。具体看 UEFI 里面编译出的 文件系统支持。
死扣 spec 字眼,顶着杠头讲,不是 FAT 也行!反正越妖怪,越依具体的 UEFI 环境,越没有小伙伴一起玩。
其次,在这个 FAT32 分区上,这个目录位置,放这个文件。一起放也没问题,如果你都有的话。
但你放那么多干嘛?你是开发啊,又不是售后,要么测试?
\EFI\Boot\bootx64.efi # 如果是 x64 机器
\EFI\Boot\bootaa64.efi # 如果是 ARM64 机器
没啦,就这么简单。那如何弄到这个文件呢?
问相关软件从业人员 要一个,或 网上下载一个(有点不靠谱),或自己 造一个!
(1)这个文件原始文件名不重要,放到这个目录时 必须要一模一样。
(2)这个文件,究竟是什么鬼不重要,只要是个 UEFI Application 就行
所以,弄到 Shell 的 .elf 可执行文件后,copy 到这个目录,改成上述文件名。
然后,捅到机器上,从 U 盘启动……
然后,砰的一下,…… 进 UEFI Shell 啦!
参考资料:https://uefi.org/specs/UEFI/2.11/03_Boot_Manager.html#removable-media-boot-behavior
自己造出 UEFI Shell
以当代计算机环境的流氓与强大,自己编一个 UEFI Shell 出来,已经变得非常 容易 与 廉价
—— 借助运行在服务端的容器的力量!
https://github.com/microsoft/mu_tiano_platforms
TODO 补充操作步骤
=== 低调的结束线
浙公网安备 33010602011771号