无忧启动论坛

标题: 碰到IPXE启动很奇怪的问题,原因是wimboot没有使用官方的版本。 [打印本页]

作者: mygamexxx    时间: 前天 21:20
标题: 碰到IPXE启动很奇怪的问题,原因是wimboot没有使用官方的版本。
本帖最后由 mygamexxx 于 2025-9-11 13:49 编辑

HTTP服务器开启,QEMU从光盘映像启动IPXE,脚本指向HTTP服务器根目录下的autoexec.ipxe。
使用IPXE启动WIN10PE,出现问题,看看BCD好像也没问题,不知道是什么原因。
已找到原因,是wimboot没有使用官方版本(IPXE与GRUB2的wimboot混淆了)。UEFI已经没问题,但BIOS还是有问题。initrd -n 用于名称不一样时,相当于重命名。用于GRUB2或G4E的wintoflash大的修改版,没有这个问题,但不能用于IPXE。
#!ipxe
ifopen net0
ifstat
dhcp
set protocol http    #初始化协议变量,走http
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server} #有代理dhcp信息就直接取值,智能获取启动ip

:start
    menu iPXE Boot Menu BootServer--${protocol}://${booturl}
    item --key 1 winpe   1.Boot WinPE 64 (wimboot)
    item --key 5 reboot  5.Reboot computer
    choose --timeout 5000 selected
    goto ${selected}
:reboot
    reboot
:winpe
    kernel ${protocol}://${booturl}/boot/wimboot_ipxe ${wimbootcmd} gui
#前后文件名称不相同时,要加 -n 参数,同时两个文件先后顺序不一样。
    iseq ${platform} efi && initrd -n bootx64.efi ${protocol}://${booturl}/bootmgfw.efi || ##不加 -n 参数没有影响,名称首先用bootx64.efi(安全启动必须用bootx64.efi名称),bootmgfw.efi好像也可。
    initrd -n bcd ${protocol}://${booturl}/boot/bcdpxe ||  ##两个文件名称不一样,不加 -n 参数,在BCD加载出错。
    initrd -n boot.sdi ${protocol}://${booturl}/boot/boot.sdi ||  ##两个文件名称一样,不加 -n 参数没有影响。
    initrd ${protocol}://${booturl}/boot/boot.wim boot.wim
    imgstat && sleep 10
    boot


BIOS.png (6.76 KB, 下载次数: 1)

BIOS.png

UEFI.png (8.77 KB, 下载次数: 2)

UEFI.png

BCD.png (116.1 KB, 下载次数: 6)

BCD.png

作者: 江南一根葱    时间: 前天 21:56
很奇怪,wimboot根本不需要去修改什么BCD文件
作者: 邪恶海盗    时间: 前天 23:31
TinyPXEServer 云端网络启动小试,适用于BIOS/UEFI (请允许我标题一回) By:邪恶海盗
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=419305
作者: mygamexxx    时间: 昨天 08:09
传输好像什么都正确,但就是启动出错:Bad CPIO magic。

BIOS.png (127.9 KB, 下载次数: 1)

BIOS.png

UEFI.png (93.07 KB, 下载次数: 0)

UEFI.png

作者: dksoft    时间: 昨天 08:16
进来学习
作者: mygamexxx    时间: 昨天 08:21
本帖最后由 mygamexxx 于 2025-9-10 09:36 编辑

找到两个相类似问题:
https://kkgithub.com/ipxe/ipxe/issues/1422
https://forum.ipxe.org/showthread.php?tid=7436
第一个中提到用1.0.0版本的IPXE是启动成功的。
第二个中提到initrd -n参数,加了好像也没卵用(加了 -n 参数,命令的文件名称要前后换一下)。



作者: tanglf    时间: 昨天 08:23
ipex 启动是何场景
作者: mygamexxx    时间: 昨天 08:25
tanglf 发表于 2025-9-10 08:23
ipex 启动是何场景

HTTP服务器,QEMU从光盘映像启动IPXE,脚本指向HTTP服务器根目录下的autoexec.ipxe.
作者: mygamexxx    时间: 昨天 09:19
本帖最后由 mygamexxx 于 2025-9-10 09:38 编辑

请教一下,下面注释掉的两行与未注释的两行(加-n参数)是不是效果一样?运行后好像效果一样。
initrd -n BCD ${protocol}://${booturl}/boot/bcdpxe ||
initrd -n boot.sdi ${protocol}://${booturl}/boot/boot.sdi ||
# initrd ${protocol}://${booturl}/boot/bcdpxe  BCD ||
# initrd ${protocol}://${booturl}/boot/boot.sdi boot.sdi ||
在脚本中加imgstat && sleep 20
显示如图:


wechat_2025-09-10_093803_603.png (4.4 KB, 下载次数: 1)

wechat_2025-09-10_093803_603.png

作者: 肉仔    时间: 昨天 11:27
来看看
作者: guong    时间: 昨天 13:49
来了解一下
作者: 江南一根葱    时间: 昨天 15:05
模板都写好了,为啥要乱改文件
作者: 201287zr    时间: 昨天 16:53
mygamexxx 发表于 2025-9-10 09:19
请教一下,下面注释掉的两行与未注释的两行(加-n参数)是不是效果一样?运行后好像效果一样。
initrd -n BC ...

我以前也测试过,也感到很困惑。好像-n是用于将文件在虚拟盘中时行重命名,一般用于对bootmgr或BCD有改动的文件。我感觉好像是UEFI必须得用-n来重命令引导文件,BIOS似乎又不用-n参数。
作者: mygamexxx    时间: 昨天 18:40
本帖最后由 mygamexxx 于 2025-9-10 18:45 编辑
江南一根葱 发表于 2025-9-10 15:05
模板都写好了,为啥要乱改文件

到无忧就是学习,原来IPXE启动PE的脚本是liuzhaoyzz大写的模板,新的模板是葱大您写的,只是在HTTP传输总是出错,我估计是HTTP服务器的原因。所以在网上找相同的问题,看到有关-n参数的说法,所以自己尝试改,看看能不能解决问题。通过不停的改和试,也慢慢理解了模板的意义。

职业习惯,有问题就尝试着改。也明白了脚本没问题,只是HTTP服务可能会因为时间长拒绝连接。现在只用HTTP服务器,不用TFTP服务,在UEFI下QEMU启动都是正常的。想不通原因而已。PXE方式与单纯HTTP方式使用的是同一个脚本。
作者: 江南一根葱    时间: 昨天 18:48
mygamexxx 发表于 2025-9-10 18:40
到无忧就是学习,原来IPXE启动PE的脚本是liuzhaoyzz大写的模板,新的模板是葱大您写的,只是在HTTP传输总 ...

ipxe要去官方网站学习,ipxe.org
作者: mygamexxx    时间: 昨天 19:04
本帖最后由 mygamexxx 于 2025-9-10 19:11 编辑
江南一根葱 发表于 2025-9-10 18:48
ipxe要去官方网站学习,ipxe.org

网站上的示例太简单,已经把所有命令介绍下载并翻译了。出错提示,往往介绍源代码哪里可能有问题,我又看不懂源代码,只好乱试。
作者: mygamexxx    时间: 15 小时前
BIOS还是不行,难道ipxe的wimboot分UEFI与BIOS两个版本?

作者: mygamexxx    时间: 15 小时前
本帖最后由 mygamexxx 于 2025-9-11 08:33 编辑

网上说IPXE1.0.0在BIOS下配合wimboot2.8.0是成功的. 新版ipxe配合wimboot2.8.0, 在BIOS下不成功。但找不到这个1.0.0版本在哪可以下载?

wechat_2025-09-11_082257_056.png (22.04 KB, 下载次数: 1)

wechat_2025-09-11_082257_056.png

wechat_2025-09-11_082154_764.png (40.94 KB, 下载次数: 1)

wechat_2025-09-11_082154_764.png

作者: tanglf    时间: 15 小时前
mygamexxx 发表于 2025-9-10 08:25
HTTP服务器,QEMU从光盘映像启动IPXE,脚本指向HTTP服务器根目录下的autoexec.ipxe.

谢谢,回复!
作者: mygamexxx    时间: 10 小时前
本帖最后由 mygamexxx 于 2025-9-11 13:11 编辑

发现IPXE脚本 -n 参数是有用的,能解决一些问题。
#!ipxe
ifopen net0
ifstat
dhcp
set protocol http    #初始化协议变量,走http
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server} #有代理dhcp信息就直接取值,智能获取启动ip

:start
    menu iPXE Boot Menu BootServer--${protocol}://${booturl}
    item --key 1 winpe   1.Boot WinPE 64 (wimboot)
    item --key 5 reboot  5.Reboot computer
    choose --timeout 5000 selected
    goto ${selected}
:reboot
    reboot
:winpe
    kernel ${protocol}://${booturl}/boot/wimboot_ipxe ${wimbootcmd} gui
#前后文件名称不相同时,要加 -n 参数,同时两个文件先后顺序不一样。
    iseq ${platform} efi && initrd -n bootx64.efi ${protocol}://${booturl}/bootmgfw.efi || ##不加 -n 参数没有影响,名称首先用bootx64.efi(安全启动必须用bootx64.efi名称),bootmgfw.efi好像也可。
    initrd -n bcd ${protocol}://${booturl}/boot/bcdpxe ||  ##两个文件名称不一样,不加 -n 参数,在BCD加载出错。
    initrd -n boot.sdi ${protocol}://${booturl}/boot/boot.sdi ||  ##两个文件名称一样,不加 -n 参数没有影响。
    initrd ${protocol}://${booturl}/boot/boot.wim boot.wim
    imgstat && sleep 10
    boot



作者: fegr    时间: 7 小时前
感谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3