我不断看到关于 EFI / UEFI shell 通过扩展支持网络资源的想法,但我似乎找不到任何具体的东西。
我正在尝试从 EFI shell 中的网络资源将 sas3flash.efi 传输到本地系统。
我有一个 HTTP 服务器,上面有我需要的文件,我只需要在 EFI shell 中留出一点空间(ramdisk 就足够了)和 wget 命令。
我觉得这应该没那么难。我是不是忽略了什么关键的东西?
答案1
您无法使用 EFI shell 中的 HTTP 执行您想要的操作
我知道您想运行(从网络检索)某些固件更新应用程序 (sas3flash.efi)。在这种情况下,您必须编写并启动(或网络启动)自定义 EFI 应用程序,该应用程序使用 EFI 环境的网络资源,即EFI_HTTP_PROTOCOL
(如前所述)能够通过网络检索并运行所需的应用程序及其组件。请记住,sas3flash.efi 需要本地找到一些组件;sas3flash.efi 不是为通过网络检索它们而设计的。
您可能无需编码就可以做您想做的事情,但是使用“远程文件传输协议“UEFI shell 命令。它实现了一个 TFTP 客户端(类似于 wget,但适用于 TFTP),能够从 TFTP 服务器检索文件
答案2
第一个选项:
正如 fpmurphy1 所说,UEFI 2.5 增加了对 HTTP 启动的支持。您可以启动 EFI 映像或 ISO9660 磁盘映像。
UEFI HTTP 启动可以通过 DHCP 选项 67 或 UEFI 固件菜单进行配置。相关文档如下:https://github.com/tianocore/tianocore.github.io/wiki/HTTP-Boot
第二个选项使用 UEFI 的 PXE 并通过 DHCP/TFTP 加载任何 EFI 二进制文件。
第三个选项使用第二个选项加载 iPXE 网络引导加载程序。编译bin-x86_64-efi/snponly.efi
git clone https://github.com/ipxe/ipxe.git
cd ipxe/src/
make bin-x86_64-efi/snponly.efi
然后使用非常灵活的 iPXE。它允许访问 HTTP、HTTPS、FTP、iSCSI、FCoE、AOE。请参阅:http://ipxe.org/,http://networkboot.org/有关网络启动的解释,以及https://rom-o-matic.dev/生成自定义 iPXE 映像。
您可以使用 DHCP 通过 UEFI HTTP 启动链式加载 iPXE:http://ipxe.org/appnote/uefihttp