无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 我是神仙
打印 上一主题 下一主题

[分享] iPXE wimboot 现在支持UEFI下的http/ftp启动了

    [复制链接]
1#
发表于 2014-9-10 05:04:16 | 显示全部楼层
本帖最后由 hhh333 于 2014-9-10 05:38 编辑

没玩成功,启动出菜单,但提示错误,我的菜单如下:
  1. #!ipxe
  2.   #set menu-timeout 8000
  3.    set menu-default w8pe64
  4.    isset ${ip} || dhcp
  5.    isset ${next-server} || set next-server 192.168.7.100
  6. :start
  7.   menu iPXE EFI Boot Menu
  8.   item --gap --             -------------------------------- H3 PE TOOL ---------------------------
  9.   item w8pe64               Win8 PE 64
  10.   item w81pe64              Win81 PE 64
  11.   item --gap --             -----------------------------------------------------------------------
  12.   choose --timeout ${menu-timeout} --default ${menu-default} selected
  13.   goto ${selected}

  14. :failed
  15.   echo Booting failed, dropping to shell
  16.   goto shell

  17. :w8pe64
  18.   kernel http://${next-server}/BOOT/wimboot
  19.   initrd http://${next-server}/efi/boot/bootx64.efi bootx64.efi
  20.   initrd http://${next-server}/efi/microsoft/boot/bcd        bcd
  21.   initrd http://${next-server}/BOOT/boot.sdi        boot.sdi
  22.   initrd http://${next-server}/BOOT/H3_8PE64.WIM        H3_8PE64.WIM
  23.   boot || goto failed
  24.   goto start

  25. :w81pe64
  26.   kernel http://${next-server}/BOOT/wimboot
  27.   initrd http://${next-server}/efi/boot/bootx64.efi        bootx64.efi
  28.   initrd http://${next-server}/efi/microsoft/boot/bcd        bcd
  29.   initrd http://${next-server}/BOOT/boot.sdi        boot.sdi
  30.   initrd http://${next-server}/BOOT/H3_81P64.WIM        H3_81P64.WIM
  31.   boot || goto failed
  32.   goto start

复制代码


所有文件读取正常,BCD中菜单也可以出,但最后一步出错。过程如下:








我大致是这么玩的:
1、先到网站去编译一个snponly.efi,再改名:efi/boot/iPXE64.efi。脚本简单,就是两条语句
#!ipxe
   isset ${ip} || dhcp
   chain --autofree BOOT/H3_iPXEM.EFI

2、将真正的菜单内容(见上)保存为BOOT/H3_iPXEM.EFI

3、在haneWIN指定EFI启动文件为efi/boot/iPXE64.efi,如下图:


又用pause暂停了wimboot一下,好象也无问题:
回复

使用道具 举报

2#
发表于 2014-9-10 06:25:30 | 显示全部楼层
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

点评

7个字符以内  详情 回复 发表于 2014-9-10 12:03
经过多次实验,确认它这个wim的文件名只能是字符以内。8个字符就会出错  详情 回复 发表于 2014-9-10 12:02
试过了 不是不能改名 而是不支持你那个名字。 具体点说,感觉不支持下划线 把你那个名字中的下划线去掉 就可以启动了 initrd http://${next-server}/BOOT/H38PE64.WIM H38PE64.WIM  详情 回复 发表于 2014-9-10 11:43
initrd http://${next-server}/BOOT/H3_8PE64.WIM H3_8PE64.WIM 试了一下,改成这样就行了: initrd http://${next-server}/BOOT/H3_8PE64.WIM boot.WIM  详情 回复 发表于 2014-9-10 10:17
是有这个问题,wimboot新版也有bug,在vmware下bios启动蓝屏,暂时只能这样,bios用老版2.1.0版,efi用新版  详情 回复 发表于 2014-9-10 08:10
回复

使用道具 举报

3#
发表于 2014-9-10 12:25:52 | 显示全部楼层

竟然是这个样子的,我试一下,看来还有bug,不忙更新。先好好测试一下。
回复

使用道具 举报

4#
发表于 2014-9-10 13:39:28 | 显示全部楼层
我是神仙 发表于 2014-9-10 12:52
现在新版的wimboot同时支持efi和bios启动了,理想的情况下 可以使用完全相同的脚本启动

理想的情况就是 ...

我想为启动项指定不同的BCD,如:  initrd http://${next-server}/efi/microsoft/boot/b64 bcd
提示出错,必须为  initrd http://${next-server}/efi/microsoft/boot/bcd bcd

这个算不算bug,用了kernel http://${next-server}/BOOT/wimboot rawbcd也没有用。

点评

我自己用的是 initrd boot/bcf bcf 两个文件名要一致。bcf是在bootmgr.exe中修改  详情 回复 发表于 2014-9-10 13:42
回复

使用道具 举报

5#
发表于 2014-9-10 13:47:30 | 显示全部楼层
我是神仙 发表于 2014-9-10 13:42
我自己用的是 initrd boot/bcf bcf

两个文件名要一致。bcf是在bootmgr.exe中修改

记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

点评

其实是语法错误。正确的语法是 initrd [--name ] [--timeout ] [...] ipxe.org/cmd/initrd . 即 改成 initrd --name bootmgr http://${next-server}/BOOT/H3_MGR16.BIN 就行了  详情 回复 发表于 2014-9-10 17:33
我试了下 现在新版的wimboot实际上简化了 initrd后面不用重复一次文件名了 即不用initrd boot/bcd bcd 而是直接 initrd boot/bcd 这样就行了。后面写的文件名没啥用了。 本身是简化了。不过想用这个来重命名  详情 回复 发表于 2014-9-10 14:16
估计关键是要修改bootmgr(其实就是修改里面的bootmgr.exe)。bootx64.efi这个应该类似,拿个二进制工具修改 不过没改过。bootmgr.exe倒改过的,只改一个字节就把bcd改成bcf了  详情 回复 发表于 2014-9-10 13:50
回复

使用道具 举报

6#
发表于 2014-9-10 13:58:42 | 显示全部楼层
我是神仙 发表于 2014-9-10 13:50
估计关键是要修改bootmgr(其实就是修改里面的bootmgr.exe)。bootx64.efi这个应该类似,拿个二进制工具 ...

我改过bootx64.efi,没有问题,不想搞很多启动文件

点评

刚才我也试了下 查找5C 00 42 00 43 00 44 即\BCD 改为其他的如BCG 确实可以启动。 现在那个initrd好像确实要求文件名要一致。 pxe直接启动时好像有个DHCP选项(252)可以控制bcd文件名,wimboot倒不知道可不可以用到  详情 回复 发表于 2014-9-10 14:08
回复

使用道具 举报

7#
发表于 2014-9-11 09:42:42 | 显示全部楼层
本帖最后由 hhh333 于 2014-9-11 09:46 编辑
我是神仙 发表于 2014-9-10 17:35
从页面http://ipxe.org/wimboot的示例来看 作者自己也没有意识到这个语法变化。他可能没想到会有人把文件 ...


现在用2.2.4版本的-n参数改名的问题解决了,最多7个字符的文件名问题还是存在,看作者什么时候修正。
这是菜单,可以为同一个启动文件启动不同的BCD了。
  1. #!ipxe
  2.   #set menu-timeout 8000
  3.    set menu-default w8pe64
  4.    isset ${ip} || dhcp
  5.    isset ${next-server} || set next-server 192.168.7.100
  6. :start
  7.   menu iPXE EFI Boot Menu
  8.   item --gap --             -------------------------------- H3 PE TOOL ---------------------------
  9.   item w8pe64               Win8 PE 64
  10.   item w81pe64              Win81 PE 64
  11.   item --gap --             -----------------------------------------------------------------------
  12.   choose --timeout ${menu-timeout} --default ${menu-default} selected
  13.   goto ${selected}

  14. :failed
  15.   echo Booting failed, dropping to shell
  16.   goto shell

  17. :w8pe64
  18.   kernel http://${next-server}/BOOT/wimboot
  19.   initrd http://${next-server}/efi/boot/bootx64.efi
  20.   initrd -n BCD http://${next-server}/efi/microsoft/boot/b64
  21.   initrd http://${next-server}/BOOT/boot.sdi
  22.   initrd http://${next-server}/BOOT/H3_864.WIM
  23.   boot || goto failed
  24.   goto start

  25. :w81pe64
  26.   kernel http://${next-server}/BOOT/wimboot rawbcd
  27.   initrd http://${next-server}/efi/boot/bootx64.efi
  28.   initrd -n BCD http://${next-server}/efi/microsoft/boot/b16
  29.   initrd http://${next-server}/BOOT/boot.sdi
  30.   initrd http://${next-server}/BOOT/H3_8164.WIM
  31.   boot || goto failed
  32.   goto start

复制代码

点评

又试了下 好像这个--name或-n的语法只是针对efi情况的。在普通bios时还是要用initrd bcd bcd这种情况重复一下文件才行。同一个wimboot文件却有两种语法,应该不是故意为之,感觉算是bug吧  详情 回复 发表于 2014-9-11 19:33
回复

使用道具 举报

8#
发表于 2014-9-21 07:33:24 | 显示全部楼层

似乎不支持32位EFI,如下图,好象传输都是正常的。

点评

以前只试了64位的ipxe. 不过我看虚拟机vmware 32位的不能用64位的ipxe.efi启动 而且32位的ipxe.efi我始终编译不成功. https://rom-o-matic.eu/也始终打不开 另外在32位的uefi vmware上试了一下syslinux, 64位的  详情 回复 发表于 2014-9-21 10:41
听说基本没有32位的UEFI? 32位EFI的用vmware怎么模拟? 我是加了个firmware="efi" 我看dhcp请求都是arch:00007,怎么变成arch:00006? 我看图片上加载了wim文件后马上就报错了 是马上就用了boot语句?出错了就要  详情 回复 发表于 2014-9-21 10:15
回复

使用道具 举报

9#
发表于 2014-9-21 10:41:48 | 显示全部楼层
本帖最后由 hhh333 于 2014-9-21 10:45 编辑
我是神仙 发表于 2014-9-21 10:15
我看图片上加载了wim文件后马上就报错了 是马上就用了boot语句?出错了就要加上imgstat语句并且加上 ...


确实是boot语句出错了,后面是脚本中没有shell标签的问题,不管它。
我大致是这样的,先去编译一个32位的ipxe32.efi,放一个脚本:
  1. #!ipxe
  2. dhcp
  3. set x32 32
  4. chain efi/H3_iPXEM.EFI
复制代码


编一个菜单,支持32与64的:
  1. #!ipxe
  2. set menu-timeout 8000
  3. set menu-default w8pe
  4. isset ${ip} || dhcp
  5. isset ${next-server} || set next-server 192.168.7.100
  6. cpuid --ext 29 && set x64 Y || set x32 Y
  7. :start
  8.   menu iPXE EFI Boot Menu
  9.   item --gap --             -------------------------------- H3 PE TOOL ---------------------------
  10.   item w8pe                   1-- Win8 PE
  11.   item w81pe                  2-- Win81 PE
  12.   item --gap --             -----------------------------------------------------------------------
  13.   choose --timeout ${menu-timeout} --default ${menu-default} selected
  14.   goto ${selected}

  15. :shell
  16.   echo Type 'exit' to get the back to the menu
  17.   shell
  18.   goto start

  19. :failed
  20.   echo Booting failed, dropping to shell
  21.   imgstat
  22.   goto shell

  23. :w8pe
  24.         set bootfile bootx64.efi && set tbcdfile BCD && set sbcdfile b64 && set pefile H3_864.WIM
  25.         isset ${x32} && set bootfile bootia32.efi && set tbcdfile B32 && set sbcdfile b832 && set pefile H3_8PE.WIM ||
  26.   goto wimbootpe

  27. :w81pe
  28.         set bootfile bootx64.efi && set tbcdfile BCD && set sbcdfile b16 && set pefile H3_8164.WIM
  29.         isset ${x32} && set bootfile bootia32.efi && set tbcdfile B32 && set sbcdfile b8132 && set pefile H3_81PE.WIM ||
  30.   goto wimbootpe

  31. :wimbootpe
  32.   kernel http://${next-server}/BOOT/wimboot
  33.   initrd http://${next-server}/efi/boot/${bootfile}
  34.   initrd -n ${tbcdfile} http://${next-server}/efi/microsoft/boot/${sbcdfile}
  35.   initrd http://${next-server}/BOOT/boot.sdi
  36.   initrd http://${next-server}/BOOT/${pefile}
  37.   boot || goto failed
  38.   goto start
复制代码


64位没有问题,32位的就如下:


另外要说的是,32位的EFI,只要在VM中建非64位的虚拟机,再加那一条命令就是32位EFI启动的。PXE启动EFI32没有问题,现在就在ipxe与wimboot配合时出错,不知是不是wimboot的问题。
回复

使用道具 举报

10#
发表于 2014-9-21 10:50:54 | 显示全部楼层
本帖最后由 hhh333 于 2014-9-21 10:52 编辑
我是神仙 发表于 2014-9-21 10:41
以前只试了64位的ipxe. 不过我看虚拟机vmware 32位的不能用64位的ipxe.efi启动 而且32位的ipxe.efi我始 ...


我是翻墙后开的,否则有时开不了,选高级模式,有32位的EFI,这是编译好的: ipxe32.7z (295.1 KB, 下载次数: 12)
它会转到efi\H3_iPXEM.EFI脚本。

点评

可以加上一个ping命令,有时用来进入shell来测试网络是否连通 挺有用的。再加个console命令可以在ipxe菜单中显示背景图片。当然这些都是小儿科 能启动PE才是关键  详情 回复 发表于 2014-9-21 15:41
看了下它那个网页rom-o-matic.eu 确实 是引用了 ajax.googleapis.com这个网站上的两个js文件。知道原因就好办了,把这两个js文件下载到本机就可以用了  详情 回复 发表于 2014-9-21 15:38
原来是被墙了?可能是用了google的服务 我怎么一直没想到这个。。。还以为是我的打开方式不对 32位的确实玩不转。不过我试了下直接用bootia32.efi为启动文件进行传统的pxe启动好像也不得行呢  详情 回复 发表于 2014-9-21 11:26
回复

使用道具 举报

11#
发表于 2014-9-21 13:42:23 | 显示全部楼层
我是神仙 发表于 2014-9-21 11:56
又试了下 直接用bootia32.efi为启动文件进行传统的pxe启动 还是可以启动的!

看了日志 是因为那个bcd ...

bootia32.efi 可以启动,只要不特意去改变那个参数,特别是在VM中测试时。
回复

使用道具 举报

12#
发表于 2014-9-21 15:44:56 | 显示全部楼层
感觉到EFI32不能启动应该是wimboot的问题,前面都成了,就是boot不成,应该是没考虑32位的情况;

那个WIM文件名不能多于7个字符的问题也还没有发新版。

点评

EFI32这个问题昨天又发了个新版2.3.0已经解决了。和作者说了一下,他说这是因为一个编译选项忘了设置。结果代码一行没改,加了个编译选项就可以了。测试过了,确认没问题了。 https://git.ipxe.org/release/wimboot  详情 回复 发表于 2014-9-25 08:56
WIM文件名不能多于7个字符的问题在昨天的新版2.2.5中已经解决了。 efi32据说在wimboot.zip中有个文件wimboot.i386,可以试一下。  详情 回复 发表于 2014-9-24 12:37
可以多于7个字符啊。可以是9个字符 10个字符。但是好像不能是8个字符  详情 回复 发表于 2014-9-21 22:41
回复

使用道具 举报

13#
发表于 2014-9-25 10:36:40 | 显示全部楼层
本帖最后由 hhh333 于 2014-9-25 10:59 编辑
我是神仙 发表于 2014-9-25 08:56
EFI32这个问题昨天又发了个新版2.3.0已经解决了。和作者说了一下,他说这是因为一个编译选项忘了设置。结 ...


要用wimboot.i386这个文件吗?

试了,用这个文件可以了
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 13:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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