无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 30177|回复: 17
打印 上一主题 下一主题

[分享] EFI启动及PXE/iPXE的BCD位置

  [复制链接]
跳转到指定楼层
1#
发表于 2014-9-19 17:35:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hhh333 于 2014-9-19 18:09 编辑

近期在调试EFI网启,BCD位置各有不同,笔记出来:

1、EFI本地启动与EFI网启BCD不一样
EFI本地启动:bootx64.efi-->efi\microsoft\boot\bcd-->pe.wim
EFI网络启动:bootx64.efi-->boot\bcd-->pe.wim

2、EFI网启时PXE与iPXE的BCD不一样
PXE过程:bootx64-->boot\bcd-->pe.wim
iPXE过程:snponly.efi-->wimboot-->bootx64.efi-->efi\microsoft\boot\bcd-->pe.wim

基于以上过程,如何修改自己的PE网启模块?下面谈一下经验:
新的wimboot可以支持EFI网启了,显然用iPXE/wimboot/HTTP配合网启目前速度是最快的。这个过程如下:
efi\boot\ipxe64.efi-->efi\H3_iPXEM.EFI-->BOOT\wimboot-->efi\boot\bootx64.efi-->efi\microsoft\boot\bcd-->UEFI PE(Win8 64或Win8.1 64)
其中ipxe64.efi是通过网络编译的,脚本很简单
  1. #!ipxe
  2. dhcp
  3. chain efi/H3_iPXEM.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. :failed
  16.   echo Booting failed, dropping to shell
  17.   goto shell

  18. :w8pe
  19.         set bootfile bootx64.efi && set tbcdfile BCD && set sbcdfile b64 && set pefile H3_864.WIM
  20.         isset ${x32} && set bootfile bootia32.efi && set tbcdfile B32 && set sbcdfile b832 && set pefile H3_8PE.WIM ||
  21.   goto wimbootpe

  22. :w81pe
  23.         set bootfile bootx64.efi && set tbcdfile BCD && set sbcdfile b16 && set pefile H3_8164.WIM
  24.         isset ${x32} && set bootfile bootia32.efi && set tbcdfile B32 && set sbcdfile b8132 && set pefile H3_81PE.WIM ||
  25.   goto wimbootpe

  26. :wimbootpe
  27.   kernel http://${next-server}/BOOT/wimboot
  28.   initrd http://${next-server}/efi/boot/${bootfile}
  29.   initrd -n ${tbcdfile} http://${next-server}/efi/microsoft/boot/${sbcdfile}
  30.   initrd http://${next-server}/BOOT/boot.sdi
  31.   initrd http://${next-server}/BOOT/${pefile}
  32.   boot || goto failed
  33.   goto start
复制代码

评分

参与人数 2无忧币 +10 收起 理由
天使的魔翼 + 5 H3大大出手了,继续跟进中
阿弥陀佛 + 5 感谢分享经验!有空也玩玩efi网启。

查看全部评分

推荐
发表于 2014-9-19 22:22:00 | 只看该作者
EFI网启时PXE与iPXE的BCD不一样

这个其实是一样的,可以用同一位置的同一文件

因为wimboot对来源文件的路径不做任何要求 只要文件名对了就行。

点评

1、不知道什么原因,MS在EFI的本地启动与网络启动要使用不同的BCD 2、我之所以说iPXE与PXE不一样应该是有根据的: 因为我已经将bootx64.efi中的网启的BCD改成了boot\bxe,如果是网启它应该找BXE文件,也即wimboot  详情 回复 发表于 2014-9-20 07:20
回复

使用道具 举报

推荐
发表于 2014-9-20 09:12:38 | 只看该作者
本帖最后由 我是神仙 于 2014-9-20 09:23 编辑
1、EFI本地启动与EFI网启BCD不一样
EFI本地启动:bootx64.efi-->efi\microsoft\boot\bcd-->pe.wim
EFI网络启动:bootx64.efi-->boot\bcd-->pe.wim

2、EFI网启时PXE与iPXE的BCD不一样
PXE过程:bootx64-->boot\bcd-->pe.wim
iPXE过程:snponly.efi-->wimboot-->bootx64.efi-->efi\microsoft\boot\bcd-->pe.wim



笼统的说 “EFI本地启动与EFI网启BCD不一样”  不大好,因为下面紧接着就说了“EFI网启”有两种。
而有一种网启是可以和本地启动使用同一位置的同一文件的,另一种网启位置不同但内容可以是复制的同样文件


这里实际有谈到三种EFI启动(还有光盘UEFI是另外一种)
1 EFI本地启动:\efi\boot\bootx64.efi--> \efi\microsoft\boot\bcd --> pe.wim
2 PXE EFI过程:bootx64.efi --> \boot\bcd --> pe.wim
3 iPXE EFI过程:snponly.efi --> wimboot --> bootx64.efi--> bcd-->pe.wim

前面有\开头的文件是绝对目录,不能改,其他文件可以是任意目录。

即 1EFI本地启动 和 2PXE EFI网启由于目录名使用了不同的绝对目录 不能使用同一BCD文件。而且目录名差异过大,主要是长度差异太大,无法通过修改的方式指向同一文件。
但 3 iPXE EFI过程这个全部使用的是任意目录,所以它可以和 1EFI本地启动使用同一文件, 也可以和 2PXE EFI网启使用同一文件。

均测试通过

initrd ${base}/efi/boot/bootx64.efi
initrd ${base}/efi/microsoft/boot/bcd
initrd ${base}/boot/boot.sdi     
initrd ${base}/sources/boot.wim  
这就和本地EFI启动使用同一BCD文件

改成
initrd ${base}/boot/bcd
这就和PXE的EFI启动使用同一BCD文件

都可以启动。






2、我之所以说iPXE与PXE不一样应该是有根据的:
因为我已经将bootx64.efi中的网启的BCD改成了boot\bxe,如果是网启它应该找BXE文件,也即wimboot应该要将你从服务器获得的BCD改成BXE,而现在还是使用BCD文件名。
当然,如果wimboot永远使用bcd作为bcd文件的文件名也有可能。


我记得在另一贴中回复过你的
http://bbs.wuyou.net/forum.php?m ... p;page=3#pid2966506

发表于 2014-9-10 14:08:11 | 只看该作者

    hhh333 发表于 2014-9-10 13:58
    我改过bootx64.efi,没有问题,不想搞很多启动文件


刚才我也试了下 查找5C 00 42 00 43 00 44 即\BCD 改为其他的如BCG 确实可以启动。


这是81update1中的bootx64.efi网启时的BCD位置:


好像不是这里吧。好像有两处
一处是\bcd
一处是\boot\bcd
都要改吧?反正我两处都改了,可以启动



kernel wimboot
initrd ${base}/efi/boot/bootx64.efi
initrd ${base}/efi/microsoft/boot/bxe
initrd ${base}/boot/boot.sdi     
initrd ${base}/sources/boot.wim  

完全可以启动


我使用的boot.wim其实就是你那个h3cdall.iso里面pe8164.wim


对这个bcd文件的重复使用 我前几天研究过怎么用最少的文件支持各种启动,还发了个帖子
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=337945
所以还是比较熟悉
不过这些启动方式也就这几天熟悉,过几天可能就忘了 总归是太复杂了

点评

将bootx64.efi用winhex查找\bcd,会找到两个,一个是\Boot\BCD--PXE启动时使用的BCD,另一个是\BCD--本地启动时BCD,而且前面有变量,实际指向\efi\microsoft\boot\bcd,因为将这个改一个名如B64,则会到这个地方去  详情 回复 发表于 2014-9-20 10:25
回复

使用道具 举报

推荐
 楼主| 发表于 2014-9-20 07:20:41 | 只看该作者
本帖最后由 hhh333 于 2014-9-20 07:43 编辑
我是神仙 发表于 2014-9-19 22:22
EFI网启时PXE与iPXE的BCD不一样

这个其实是一样的,可以用同一位置的同一文件


1、不知道什么原因,MS在EFI的本地启动与网络启动要使用不同的BCD
2、我之所以说iPXE与PXE不一样应该是有根据的:
因为我已经将bootx64.efi中的网启的BCD改成了boot\bxe,如果是网启它应该找BXE文件,也即wimboot应该要将你从服务器获得的BCD改成BXE,而现在还是使用BCD文件名。
当然,如果wimboot永远使用bcd作为bcd文件的文件名也有可能。

又看了不是EFI情况下的ipxe菜单:
:w8pe
  kernel http://${next-server}/BOOT/wimboot
  initrd http://${next-server}/BOOT/H3_MGRW8.BIN        bootmgr
  initrd http://${next-server}/BOOT/BW8        BW8
  initrd http://${next-server}/BOOT/boot.sdi        boot.sdi
  initrd http://${next-server}/BOOT/H3_8PE.WIM        H3_8PE.WIM
  boot || goto failed
  goto start

我已经将H3_MGRW8.BIN中的BCD改成了BW8,则wimboot时必须是BW8,不能是BCD,说明wimboot还是根据启动文件来决定BCD文件的名称的。
这是81update1中的bootx64.efi网启时的BCD位置:


本地启动时的BCD文件名位置:

会自动到efi\microsoft\boot下找
回复

使用道具 举报

5#
 楼主| 发表于 2014-9-20 10:25:52 | 只看该作者
本帖最后由 hhh333 于 2014-9-20 10:31 编辑
我是神仙 发表于 2014-9-20 09:12
笼统的说 “EFI本地启动与EFI网启BCD不一样”  不大好,因为下面紧接着就说了“EFI网启”有两种。
...


如上面的图所示:
将bootx64.efi用winhex查找\bcd,会找到两个,一个是\Boot\BCD--PXE启动时使用的BCD(真正位置:${pxeserver root}\Boot\BCD),另一个是\BCD--本地启动时BCD,而且前面有变量,实际指向\efi\microsoft\boot\bcd,因为将这个改一个名如B64,则会到这个地方去找B64

32位与此相似,在我发布的盘中这两个地方都改成了B32,实际上是不同地方的B32。

点评

总之都改了 wimboot就可以用改过名字的bcd 了  详情 回复 发表于 2014-9-20 11:31
回复

使用道具 举报

6#
发表于 2014-9-20 11:31:24 | 只看该作者
hhh333 发表于 2014-9-20 10:25
如上面的图所示:
将bootx64.efi用winhex查找\bcd,会找到两个,一个是\Boot\BCD--PXE启动时使用的BCD ...

总之都改了 wimboot就可以用改过名字的bcd 了

点评

两个代表的意义不同好不好,你改两个地方,如果用这个来本地启动,你必须在efi\microsoft\boot下准备改名的BCD文件。 近期在与Tiny PXE Server 作者交流他这个软件,他有一种更方便的方式,用DHCP 252 option带@arc  详情 回复 发表于 2014-9-20 11:56
回复

使用道具 举报

7#
 楼主| 发表于 2014-9-20 11:56:40 | 只看该作者
我是神仙 发表于 2014-9-20 11:31
总之都改了 wimboot就可以用改过名字的bcd 了

两个代表的意义不同好不好,你改两个地方,如果用这个来本地启动,你必须在efi\microsoft\boot下准备改名的BCD文件。
近期在与Tiny PXE Server 作者交流他这个软件,他有一种更方便的方式,用DHCP 252 option带@arch变量来指明BCD位置,感觉也不错。就是[arch]段的功能还没有很好地实现。

点评

无所谓啊 正好 三者都用同一个bcd文件 252好像hanwin不支持  详情 回复 发表于 2014-9-20 12:18
回复

使用道具 举报

8#
发表于 2014-9-20 12:18:03 | 只看该作者
hhh333 发表于 2014-9-20 11:56
两个代表的意义不同好不好,你改两个地方,如果用这个来本地启动,你必须在efi\microsoft\boot下准备改名 ...

无所谓啊  正好  三者都用同一个bcd文件  252好像hanwin不支持
回复

使用道具 举报

9#
发表于 2014-10-18 23:04:06 | 只看该作者
怎么修改wimboot文件的boot路径呢?就是存放wim的,例如/boot/h3_864.wim。现在我wim放在其它地方,例如/1234/h3_864.wim,改名后的BCD已经指定了路径为/1234/h3_864.wim(这里先不讨论BCD),uefi ipxe时错误,路径都改为/boot/...就没问题。或者能给出委婉的解决办法?
回复

使用道具 举报

10#
发表于 2014-11-12 15:25:14 | 只看该作者
本帖最后由 zhaohj 于 2014-11-12 15:27 编辑

准备使用 iPXE测试看看,问大家:
原先的PXE启动的使用中文的,bcd中包含很多pe,如w8pe/w8pe.wim、w8pe/w8pe1.wim、w8pe/w8pe2.wim ......
现在用 iPXE,BCD怎么写?
我用普通的bios启动的,非efi
回复

使用道具 举报

11#
发表于 2016-3-6 20:32:28 来自手机 | 只看该作者
不错参考价值太大了
回复

使用道具 举报

12#
发表于 2018-1-23 02:45:49 | 只看该作者
可惜现在情况变了,
本地启动efi   bootx64.efi和bcd同目录就行
新版wimboot更不限制bcd位置,一样与bootx64同目录就好
只不过非要用微软的bootx64.efi通过pxe启动,bcd只能是/boot/bcd 当然通过winhex可以改下
最后结果都放一起就好了
回复

使用道具 举报

13#
发表于 2018-4-1 14:55:49 | 只看该作者
ipxe支持启动win10吗
回复

使用道具 举报

14#
发表于 2018-4-6 20:19:08 | 只看该作者
謝謝分享
回复

使用道具 举报

15#
发表于 2018-10-20 23:57:41 来自手机 | 只看该作者
EFI启动及PXE/iPXE的BCD位置      
回复

使用道具 举报

16#
发表于 2018-10-20 23:58:12 来自手机 | 只看该作者
分析pxe的引导过程
回复

使用道具 举报

17#
发表于 2020-10-24 08:43:51 | 只看该作者
感谢分析 好多看不懂 还在学习中
回复

使用道具 举报

18#
发表于 2020-10-24 08:52:04 | 只看该作者
我的是群辉启动PXE 加载的文件是pxeboot.n12 但是在启动的时候提示File:\boot\bxd  Status:0xc000000f  这个文件出错 这个文件在tftp根目录下也是有的不知道为什么就是报错
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-17 03:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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