无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 510819776

[求助] 把一个efi可运行程序添加到uefi bios教程,例如ipxe.efi刷入bios

  [复制链接]
发表于 2020-4-2 23:56:47 | 显示全部楼层 |阅读模式
本帖最后由 510819776 于 2020-4-8 01:28 编辑

虚拟机virtualbox,使用uefi引导。不知道为什么当我将网卡设置为intel pro /1000 类型的时候 uefi坏境下pxe都不显示启动项。
后来用uefitool打开了bios文件,找到了shell这个模块,然后用ipxe.efi取代之。
取代后,虚拟机原本是efi shell的启动项,用它启动就会直接运行ipxe.efi 从而到达启动pxe的效果。
如果非要用原版的virtualbox的bios文件的uefi pxe功能,那么网卡只能设置为 半虚拟化virtualnet   要命的是这个网卡默认各种pe都无法免驱动
还要自己弄驱动  虽然驱动我也弄到了
后来突然想到,我把ipxe.efi做成ffs模块后,会获得一个ffs模块的guid号
利用efi shell命令 bcfg boot dump 获取到内置efi shell启动项内容为
bcfg.PNG



shell.PNG

我就是想问一下,bcfg命令可以往nvram中添加uefi启动项,那该用什么样的命令才能调用bios芯片内置的某个efi程序模块呢?
bcfg boot add 3 a.efi “wokao”
这个命令默认是当前目录下的a.efi
bcfg boot addh 3 33 “lllllll”
这个命令是按照驱动的dh值添加启动设备,可是找了半天也没找到efi shell模块对应的模块dh号是那个
虚拟机一共从00到99 这么多 共计256个设备dh编号
还有一个命令
bcfg boot addp 3 a.efi “wokao”
似乎和add命令一样用法

求大佬指点
如何用bcfg或其他工具,添加一个类似 调用bios内置efi模块的启动项
如果成功,那么普通台式机也可以自己内置一些启动项了

或者说 有什么办法能把一个可以运行的 efi程序转换成一个efi的驱动???
把efi程序转换成  efi驱动,然后被加载运行??
或者说 写一个efi驱动
这个驱动只做一件事情,那就是当ctrl+w 被按下后,运行bios里面的一个efi模块程序????

其实没有你们想象的那么复杂,就是一个uefi bios,我想把ipxe模块刷写进去使用。那么问题来了,编译好传统模式的pci.mrom后可以用mmtool替换内置的传统类型的pxe.rom  此方法只对传统pxe模块有效。
如果要往uefi bios中以efi模块方式添加到bios中,没有办法加载它。
ipxe官方说编译efirom固件,然后刷入到网卡自带的flash芯片中,很抱歉,如果是板载网卡,一般是没有这个flash芯片的,bios中用efi模块形式实现了一个uefi pxe功能,这个时候添加efirom进去根本找不到方法,虽然也可以用mmtool强行替换传统模式的pxe模块,但是实际上刷入后根本没用。
我根据虚拟机中virtualbox里面内置efi shell的方式找到一种添加方法
1.把可执行shellx64.efi封装成shell.ffs文件,添加到uefi bios中
2.virtualbox内置的bdsdex.ffs模块会自动生成一个指向shell.ffs这个模块的内部启动项,就是我们看到的intenal efi shell选项。
现在想通过这个方法把可执行文件ipxe.efi封装成ipxe.ffs文件并添加到uefi bios中,实际测试这个方法虚拟机中管用。
但是如果这个办法添加到真机的uefi bios中 第一步可以很容易实现,但是如果主板的bios没有内置efi shell启动项,那么我在想应该用什么命令来添加这个一个启动项??
bcfg boot addh 3 0a “ipxe”  可能是一个类似这样的命令




也就是说 想要通过某种命令或者是efi工具添加一个如上图的引导项目到bios中,来实现引导ipxe.efi的目的
感觉想把uefi 版本的ipxe 刷入bios并成功运行真的是一件很困难的事情
反而是传统模式更容易实现呢?




Screenshot from 2020-04-05 14-26-37.png

这个软件确实有这个把bios内置模块添加启动项的能力,但是我测试了三种虚拟机virtualbox vmware kvm-qemu都不能成功添加这样的启动项
最后在kvm-qemu虚拟机中用另一种方法实现了
需要的软件为efivar  efibootmgr
先用efibootmgr -c -L ipxe -d /dev/sda 添加一个ipxe正常启动项
然后用efivar -w -n GUID-Boot000X -t 0x7 -f efishell.bin
这里的GUID-Boot000X 用efivar -l查看 例如
8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0002  
其中efishell.bin是从kvm-qemu提取的启动项文件。然后添加到bios里面。
结果发现  主板从文件系统加载shell已经不需要优盘或者是硬盘的某个fat分区根目录有shellx64.efi了。
算是成功实现了efi程序的内置,于是将shell替换成ipxe.efi
也可以启动。😭   
但是还是不知道,强行添加何种启动项能启动他。







最终成功了,这里记录一下操作方法。
首先准备好我们要修改的bios文件,还要我们需要运行的efi程序,比如ipxe.efi xorboot.efi clover.efi
然后把ozmosis.ffs添加到bios里面
这个ozmosis.ffs是一个efi驱动模块,它有个特性被加载之后会创建一个名为internal edk shell的开机uefi启动项,这个启动项会加载bios中guid为C57AD6B7-0515-40A8-9D21-551652854E37的ffs模块。而我们就可以把我们需要运行的efi程序做成与这个guid一样的ffs模块,一起刷入bios中,然后bios启动列表就会多出一个internal edk shell启动项。当然也可以从ozmosis.ffs中提取出ozmosis.efi 然后用winhex查找文本edk来修改启动项名称,查找16进制字符串551652854E37然后把这个guid改成自己任意的guid都行。
有些主板可能内置了internal efi shell 这样的话就不用添加ozmosis.ffs模块了,只需要用uefitool把bios中名为shellx64类似的模块的body替换成自己的efi程序就行了。
部分主板有一个 从文件系统中加载efi shell选项,这个选项的功能其实也是调用guid为C57AD6B7-0515-40A8-9D21-551652854E37的ffs模块,但是如果没有这个模块,就会调用优盘或硬盘FAT分区根目录下的shellx64.efi,不过这个入口虽然可以替换成ipxe.efi 但是他不创建uefi启动项。
综上所述
1.主板集成了internal efi shell,用uefitool打开bios文件,找到这个*shell*模块,用自己的efi程序比如ipxe.efi替换这个模块的body即可实现将ipxe.efi刷入bios中。以后调用efi shell这个启动项就能进入ipxe了
2.主板没有集成internal efi shell,用uefitool打开bios文件,添加ozmosis.ffs与C57AD6B7-0515-40A8-9D21-551652854E37.ffs(这个模块可以用自己的efi程序制作,工具是efi2ffs,只需要把guid设置为上述guid就行了)。当然如果要修改启动项名称和guid名字 也可以参考上述方法去做。




之所以会有这个帖子是因为我发现,虽然我编译了ipxe的efirom,但是真正要用uefi坏境的时候才发现根本没有办法启动ipxe。ipxe.efirom实际上是用在使用独立网卡上的(要求网卡有独立的flash芯片),如果你的主板网卡是集成的,那基本上这个efirom刷进入之后是不会出现启动项的。当然呢,一般主板都有uefi pxe功能,利用uefi pxe去加载ipxe.efi然后再使用iscsi也是可以的。


















发表于 2020-4-3 08:51:23 来自手机 | 显示全部楼层
不懂帮顶
回复

使用道具 举报

发表于 2020-4-3 10:28:53 | 显示全部楼层
大哥,你这是要魔改BIOS啊……
回复

使用道具 举报

发表于 2020-4-3 11:26:08 | 显示全部楼层
不是很明白楼主的需求,Bootice有个添加UEFI引导序列的功能,可以添加可启动的xxx.efi启动项。

点评

我知道可以添加,但是只能添加优盘或硬盘里面的启动文件,我要添加bios内文件的启动项。  详情 回复 发表于 2020-4-3 12:06
回复

使用道具 举报

 楼主| 发表于 2020-4-3 12:06:15 来自手机 | 显示全部楼层
liuzhaoyzz 发表于 2020-4-3 11:26
不是很明白楼主的需求,Bootice有个添加UEFI引导序列的功能,可以添加可启动的xxx.efi启动项。

我知道可以添加,但是只能添加优盘或硬盘里面的启动文件,我要添加bios内文件的启动项。
回复

使用道具 举报

发表于 2020-4-3 21:31:00 | 显示全部楼层
以前都是用mmtool来加legacy option rom的,加过不少ipxe的rom,好像那时还叫gpxe
uefi,应该也能用类似工具加吧

点评

添加是可以添加,但是uefi的原理决定了你添加进去一个pci efirom后根本不会被运行。 uefi的pxe模块使用另外的uefi efi驱动实现,不再加载pci rom文件 所以加进去没用 uefi根本不会去运行你加载的efirom模块  详情 回复 发表于 2020-4-3 22:28
回复

使用道具 举报

 楼主| 发表于 2020-4-3 22:28:45 | 显示全部楼层
江南一根葱 发表于 2020-4-3 21:31
以前都是用mmtool来加legacy option rom的,加过不少ipxe的rom,好像那时还叫gpxe
uefi,应该也能用类似工 ...

添加是可以添加,但是uefi的原理决定了你添加进去一个pci efirom后根本不会被运行。
uefi的pxe模块使用另外的uefi efi驱动实现,不再加载pci rom文件
所以加进去没用 uefi根本不会去运行你加载的efirom模块


回复

使用道具 举报

发表于 2020-4-3 22:54:10 | 显示全部楼层
virtualbox uefi沒有pxe功能!

参考:https://forums.virtualbox.org/viewtopic.php?f=7&t=92541

点评

virtualbox 6.1.4版本的uefi有pxe功能,前提是网卡必须设置为准虚拟化网卡。只不过准虚拟化网卡驱动比较麻烦,,pe不能自主识别。 理想状态是使用intel pro/1000虚拟网卡,需要把内置的efi shell模块替换成ipxe模块  详情 回复 发表于 2020-4-4 03:09
回复

使用道具 举报

 楼主| 发表于 2020-4-4 03:09:23 来自手机 | 显示全部楼层
hkkitlee 发表于 2020-4-3 22:54
virtualbox uefi沒有pxe功能!

参考:https://forums.virtualbox.org/viewtopic.php?f=7&t=92541

virtualbox 6.1.4版本的uefi有pxe功能,前提是网卡必须设置为准虚拟化网卡。只不过准虚拟化网卡驱动比较麻烦,,pe不能自主识别。
理想状态是使用intel pro/1000虚拟网卡,需要把内置的efi shell模块替换成ipxe模块,能正常使用。
回复

使用道具 举报

发表于 2020-4-4 11:02:10 | 显示全部楼层
我都是多加张网卡,让pe识别

点评

这个建议不错,能解决问题,谢啦。  详情 回复 发表于 2020-4-4 17:04
回复

使用道具 举报

 楼主| 发表于 2020-4-4 17:04:28 来自手机 | 显示全部楼层
江南一根葱 发表于 2020-4-4 11:02
我都是多加张网卡,让pe识别

这个建议不错,能解决问题,谢啦。
回复

使用道具 举报

发表于 2021-8-20 09:23:38 | 显示全部楼层
能否把这些文件都放出来?
回复

使用道具 举报

发表于 2022-9-27 17:47:53 | 显示全部楼层
efi2ffs这个工具搜不到,可否提供下?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 13:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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