dido0379 发表于 2019-6-10 14:45:12

UEFI下利用ixpe远程加载isoboot直接启动PE光盘镜像

本帖最后由 dido0379 于 2019-9-12 12:55 编辑

要求镜像必须支持UEFI启动

用到的文件在附件中

        因为我的工作经常要启动各种pe,在uefi下本地或者ipxe远程启动PE的iso镜像文件不怎么方便,每次都要解压出来用wimboot来启动,所以一直想找一个工具能在UEFI本地或者ipxe远程直接启动iso镜像文件(本地启动iso镜像文件只找到XORBOOT可以用),后来看了这个教程http://www.lab-z.com/stu132rd/于是有了上面那个东西。
        再经过一段时间的修改,总算可以不用ramdiskdxe了,因为ramdiskdxe.efi在较新的已经包含了此驱动的UEFI BIOS上面无法工作。并且先要载入内存需要占用更多的内存和时间。
        现在也可以用efishell载入或者grub2来载入isoboot,并且加入了一个简单的配置文件,可以在配置文件第一行里面写上iso文件的路径。
        配置文件只支持一行,指出iso文件的路径,可以是相对路径如"..\123\test.iso"或者"567.iso",也可以是绝对路径如"\abc\zxc\test2.iso"。
        如果没有配置文件,那么isoboot会在自己所在目录查找iso文件,用找到的第一个iso文件来启动。
        所以ipxe的菜单可以写成两行
                initrd         ${xieyi}://${next-server}/test.iso
                chain        ${xieyi}://${next-server}/isoboot.efi
       
        用grub2的话类似这样"chainloader /123/isoboot.efi"就可以了。
        另外我没有在真实机器上面测试,只在Q启动测试器和VMWARE里面测试过。有条件的朋友可以把测试结果反馈到这里。但是我可能不会有进一步的需求来修改了,所以把源代码也放在这里。有需要的可以自己修改。

        6月29日 重做驱动部分,已兼容铭瑄B150,华硕B250,华硕B450,附件已更新

        7月6日 添加命令行参数支持,这样就可以用同一个isoboot.efi文件启动不同文件夹或者相同文件夹下的不同的iso文件,grub2菜单可以写成
                chainloader /zxc/isoboot.efi 123/test.iso(相对路径)或者
                chainloader /zxc/isoboot.efi/abc/test.iso(绝对路径),附件已更新。
        7月7日 在使用中发现有的iso镜像把内置2.8M大小的bootimage的扇区数设置成了1个扇区(800字节)导致不能启动。改为读取内置bootimage引导区的扇区数。并且限定为最小2.8M(0x1680个扇区)。
        7月9日 调整了驱动安装顺序和策略,命令行增加了-mem,-wait n,可以按键取消倒计时,通过了少量的测试,附件已更新。

        9月12日 ,imgboot发布,包含isoboot的所有功能,增加32位版本,兼容UEFI2.0固件,增加对硬盘分区的识别,允许镜像不在imgboot所在分区。用法见压缩包中的配置文件。

devilma 发表于 2019-6-10 15:30:25

不错😊没事试试看

未完成的歌 发表于 2019-6-10 16:07:50

uefi总算支持ramdisk了


                                        藏起来的小尾巴,不让你看!

amita 发表于 2019-6-13 16:14:01

下载来试试看,多谢分享啊

扬帆起航 发表于 2019-6-13 17:14:58

感谢分享

dido0379 发表于 2019-7-6 14:11:32

本帖最后由 dido0379 于 2019-8-8 00:26 编辑

以前用grub4dos,map命令启动pe.iso真是方便。这两年一直在找能简单的在UEFI下直接启动pe.iso镜像的东西,边学边做总算完成了。

hkkitlee 发表于 2019-7-6 14:32:31

試一下

ksafei 发表于 2019-7-6 15:07:17

实机测试UEFI启动,chainloader成功

bnsgj 发表于 2019-7-6 16:11:27

高手

熄灭的烟 发表于 2019-7-7 13:29:27

ipxe不是早在N年前就支持UEFI启动ISO了吗,是我穿越回5年前看到你发的这篇文章吗?

zhangmi 发表于 2019-7-7 13:57:10

能本地启动iso,grub2终于可以媲美g4d了

dido0379 发表于 2019-7-7 14:40:17

熄灭的烟 发表于 2019-7-7 13:29
ipxe不是早在N年前就支持UEFI启动ISO了吗,是我穿越回5年前看到你发的这篇文章吗?

我是真的没找到。

ksafei 发表于 2019-7-7 18:41:13

0707版引导的兼容性有提高,但在30秒倒计时后需重新手动再次加载菜单才能正常启动。能否改成0706版那样一次性加载启动

dido0379 发表于 2019-7-8 10:43:49

wintoflash 发表于 2019-7-7 19:02
FileDiskBlockIo.c文件中,
第317行,388行,441行



感谢大佬指出,这造成了指针定位错误。更正后已重新上传了附件。

dido0379 发表于 2019-7-8 10:48:14

ksafei 发表于 2019-7-7 18:41
0707版引导的兼容性有提高,但在30秒倒计时后需重新手动再次加载菜单才能正常启动。能否改成0706版那样一次 ...

感谢反馈,已将错误等待时间改为3秒,附件已更新。

ksafei 发表于 2019-7-8 12:10:05

本帖最后由 ksafei 于 2019-7-8 12:13 编辑

dido0379 发表于 2019-7-8 10:48
感谢反馈,已将错误等待时间改为3秒,附件已更新。

感谢楼主的好作品。测试中刚好用到2个不同引导模式ISO详细反馈如下:
1)0706版:a.iso启动正常      b.iso失败(字符闪过)
2)0707版:a.iso需2次引导    b.iso需2次引导
3)0708版:a.iso需2次引导    b.iso启动正常

不知以上测试情况是不是和楼上W大所说细节有关联

pcfan120 发表于 2019-7-8 12:16:57

强,多谢分享

pcfan120 发表于 2019-7-8 12:18:27

还有一个大师做的也不错,可以借鉴下互联网启动,我等小白没看很明白
http://wuyou.net/forum.php?mod=viewthread&tid=415206&extra=

dido0379 发表于 2019-7-8 13:13:15

本帖最后由 dido0379 于 2019-7-8 13:25 编辑

wintoflash 发表于 2019-7-8 11:32
楼主啊,我对这个很感兴趣,昨天和前天都在尝试把这个移植成grub2的模块,不过目前还没有成功。

请问一 ...

那个NoBootStartAddr和NoBootSize按我的设想是代表传统启动映像的,后来发现传统映像在UEFI下面没用,所以就没管了,FindPartitionInFile里面有个错误是找到其中一个就返回EFI_SUCCESS,已经改成了必须找到UEFI启动映像才返回EFI_SUCCESS。
我的代码写得很难看(除了抄来的部分{:1_192:} ),写的时候也没考虑重用性,移植估计要费一番功夫。要是能成功移植成一个GRUB2的模块就太好了。

dido0379 发表于 2019-7-8 13:17:34

ksafei 发表于 2019-7-8 12:10
感谢楼主的好作品。测试中刚好用到2个不同引导模式ISO详细反馈如下:
1)0706版:a.iso启动正常   ...

能说一下2次引导的过程吗?还有这两个光盘的区别。

ksafei 发表于 2019-7-8 16:14:59

本帖最后由 ksafei 于 2019-7-8 16:40 编辑

dido0379 发表于 2019-7-8 13:17
能说一下2次引导的过程吗?还有这两个光盘的区别。

1.面上看不出两个ISO启动文件的区别,导出引导文件如下:
a.bif


b.bif


2.用chainloader命令菜单引导,为便于查找问题故用0707版截图
表现:第一次运行菜单会出现如下提示,然后返回菜单界面,手动再次运行命令菜单,则正常启动

a.iso-7图:


b.iso-7图:



注:0708版a.iso提示如下图,b.iso启动正常
a.iso-8

dido0379 发表于 2019-7-8 17:37:41

本帖最后由 dido0379 于 2019-7-8 17:56 编辑

ksafei 发表于 2019-7-8 16:14
1.面上看不出两个ISO启动文件的区别,导出引导文件如下:
a.bif



可能是驱动部分的安装策略兼容性不好,我得想一想再改。最好将a.iso传给我试一下。谢谢你的测试。

ksafei 发表于 2019-7-8 17:52:08

dido0379 发表于 2019-7-8 17:37
可能是驱动部分的安装策略兼容性不好,我得想一想再改。最好将a.iso传给我试一下。ftp://dido0379.oicp.n ...

由于网络限制,我无法访问ftp页面。
此PE为   @大漠孤鹰大侠的Win10PE, https://pan.baidu.com/s/142U73dt5ygIvnGoUWD9oKQ(m359 ),辛苦你了

江南一根葱 发表于 2019-7-8 19:49:22



vm试的grub2环境还是efishell下都报这个错。。

正常应该是这样的

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=378234
这个帖子的pe

dido0379 发表于 2019-7-9 18:35:27

ksafei 发表于 2019-7-8 16:14
1.面上看不出两个ISO启动文件的区别,导出引导文件如下:
a.bif



9月9日版本isoboot载入大漠孤鹰pe在铭瑄h110上一次通过了,另外加了两个命令行参数,麻烦你测试一下了。

dido0379 发表于 2019-7-9 18:39:42

wintoflash 发表于 2019-7-8 18:35
楼主,使用今天(7.8)版本的isoboot.efi启动某iso会死机,使用7.6日的版本可以正常加载为虚拟盘(但是不能启 ...

再次更新了一下,等map模块可以用了,我这个就可以退休了。感谢w大。

dido0379 发表于 2019-7-9 18:41:19

江南一根葱 发表于 2019-7-8 19:49
vm试的grub2环境还是efishell下都报这个错。。

正常应该是这样的


感谢测试,前面有一个版本是有这个问题,附件已经更新了,麻烦有空再测试一下。

江南一根葱 发表于 2019-7-9 19:18:16

dido0379 发表于 2019-7-9 18:41
感谢测试,前面有一个版本是有这个问题,附件已经更新了,麻烦有空再测试一下。

现在下载的可以了,没啥报错,马上就能启

ksafei 发表于 2019-7-9 19:42:31

dido0379 发表于 2019-7-9 18:35
9月9日版本isoboot载入大漠孤鹰pe在铭瑄h110上一次通过了,另外加了两个命令行参数,麻烦你测试一下了。

测试新版以及参数-mem均启动正常,再次感谢楼主

282198284 发表于 2019-7-21 22:41:38

能否改为支持img启动的,就是把img镜像模拟到内存盘中,启动img内存盘中的EFI\Boot\bootx64.efi
页: [1] 2 3 4
查看完整版本: UEFI下利用ixpe远程加载isoboot直接启动PE光盘镜像