无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
3871#
 楼主| 发表于 2025-10-24 19:27:01 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2025-10-24 19:29 编辑

不急。
网起测试,不是启动本地硬盘。选PXE.
回复

使用道具 举报

3872#
发表于 5 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-27 09:46 编辑
2011yaya2007777 发表于 2025-10-24 19:27
不急。
网起测试,不是启动本地硬盘。选PXE.

ipxe转G4E网启,NBpxeserver、haneWIN DHCP Server + EasyWebSvr均在加载menu.lst阶段,VMware提示错误,无法继续。
TinyPXE在ipxe转G4E和直接网启G4E均顺利启动到PE桌面。

NBpxeserver、haneWIN DHCP Server + EasyWebSvr直接网启G4E均顺利启动到PE桌面。

推测断点续传在ipxe转G4E有问题,导致VMware出错

ScreenShot_2025-10-27_092621_751.png (35.67 KB, 下载次数: 1)

ScreenShot_2025-10-27_092621_751.png

ScreenShot_2025-10-27_092845_220.png (40.1 KB, 下载次数: 0)

ScreenShot_2025-10-27_092845_220.png
回复

使用道具 举报

3873#
 楼主| 发表于 5 天前 | 只看该作者
本帖最后由 2011yaya2007777 于 2025-10-27 11:42 编辑
ipxe转G4E网启

ipxe转G4E网启,需要在ipxe菜单传递参数。/bootx64.efi  ipxe=${proxydhcp/next-server}ipxe。
转G4E网启后,不知道为什么tftp服务失效。而g4e启动为了兼容,在加载菜单时使用的是tftp服务,所以失败。如果有参数ipxe=,g4e知道是由ipxe转来,故强制使用http服务。这个现象与断点续传无关。

ipxe转G4E网启,如果使用代理dhcp,必须传入参数${proxydhcp/next-server}。

回复

使用道具 举报

3874#
发表于 5 天前 | 只看该作者
终于等到了。感谢分享!
回复

使用道具 举报

3875#
发表于 5 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-27 12:05 编辑
2011yaya2007777 发表于 2025-10-27 11:02
ipxe转G4E网启,需要在ipxe菜单传递参数。/bootx64.efi  ipxe=${proxydhcp/next-server}ipxe。
转G4E网 ...

已经传递了参数,ipxe转G4E脚本如下:
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server} #有代理dhcp信息就直接取值,智能获取启动ip
set net0/filename bootg4e.efi
chain /bootg4e.efi ipxe=${booturl}

Tinypxe在ipxe转G4E能成功启动应该证明了命令没错。

回复

使用道具 举报

3876#
发表于 5 天前 | 只看该作者
2011yaya2007777 发表于 2025-10-27 11:02
ipxe转G4E网启,需要在ipxe菜单传递参数。/bootx64.efi  ipxe=${proxydhcp/next-server}ipxe。
转G4E网 ...

可以用葱大的NBpxeserver验证。
回复

使用道具 举报

3877#
 楼主| 发表于 5 天前 | 只看该作者
本帖最后由 2011yaya2007777 于 2025-10-29 10:47 编辑
可以用葱大的NBpxeserver验证。

现在修改为http服务优先(如果支持http)、不考虑ipxe了。
但是 ipxe 使用 proxy 时,需要传入参数:proxy=${proxydhcp/next-server}
葱大的NBpxeserver,也需要传入参数:proxy=${proxydhcp/next-server}
如:  NBPE(G4E), /bootx64.efi proxy=${proxydhcp/next-server}, 8006, %tftpserver%

注意,新版本参数名称由 ipxe 变更为 proxy。

点评

问题更严重了,TINYPXE与上一版一样,在ipxe转G4E和直接网启BOOTG4E均顺利启动到PE桌面: set net0/filename bootg4e.efi chain /bootg4e.efi proxy=${booturl} ipxe转G4E,错误与上一版一样。NBpxeserver、han  详情 回复 发表于 4 天前
回复

使用道具 举报

3878#
发表于 5 天前 | 只看该作者
感谢分享
回复

使用道具 举报

3879#
发表于 4 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-28 08:01 编辑
2011yaya2007777 发表于 2025-10-27 16:11
现在修改为http服务优先(如果支持http)、不考虑ipxe了。
但是 ipxe 使用 proxy 时,需要传入参数:pro ...

问题更严重了,TINYPXE与上一版一样,在ipxe转G4E和直接网启BOOTG4E均顺利启动到PE桌面:
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server}
set net0/filename bootg4e.efi
chain /bootg4e.efi proxy=${booturl}

ipxe转G4E,错误与上一版一样。NBpxeserver、haneWIN DHCP Server + EasyWebSvr均在加载menu.lst阶段,VMware提示错误,无法继续。


直接网启BOOTG4E,NBpxeserver、haneWIN DHCP Server + EasyWebSvr均在加载menu.lst阶段,VMware提示错误,无法继续。如下图:




ScreenShot_2025-10-28_075326_624.png (42.76 KB, 下载次数: 0)

ScreenShot_2025-10-28_075326_624.png

ScreenShot_2025-10-28_074922_227.png (47.88 KB, 下载次数: 0)

ScreenShot_2025-10-28_074922_227.png
回复

使用道具 举报

3880#
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 2011yaya2007777 于 2025-10-28 08:54 编辑
问题更严重了

NBpxeserver的ipxe菜单如下:

[PXEMenuIPXE]
enabled = true
timeout = 6
randomize_timeout = false
prompt = Press F8 for iPXE Boot Menu ...
items = ; 示例: 菜单文本, 启动文件, 类型(4位Hex), 服务器IP
        iPXEFM(txt), ipxeboot.txt, 8001, %tftpserver%
        List Files, %dynamicboot%=ipxefm, 0001, %tftpserver%
        Bind PC, %dynamicboot%=whoami, 8002, %tftpserver%
        NBPE(WIM), %dynamicboot%=/newbeeplus.wim, 8003, %tftpserver%
        NBPE(ISO), %dynamicboot%=/newbeeplus.iso, 8004, %tftpserver%
        GRUBFM, %dynamicboot%=/netgrubfm.efi, 8007, %tftpserver%
        netboot, https://boot.netboot.xyz, 8005, %tftpserver%
        NBPE(G4E), /bootx64.efi proxy=${proxydhcp/next-server}, 8006, %tftpserver%

你这个:
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server}
set net0/filename bootg4e.efi
chain /bootg4e.efi proxy=${booturl}
是怎么增加到菜单里的?
怎么我这里使用NBpxeserver测试,无论ipxe转g4e,还是直接g4e,都正常啊!
1. ipxe转g4e   在菜单选NBPE(G4E)
2. 直接g4e      在菜单选List Files,然后再选 bootx64.efi

点评

我是在autoexec.ipxe脚本中的,不用NBpxeserver的IPXE菜单。  详情 回复 发表于 4 天前
回复

使用道具 举报

3881#
发表于 4 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-28 08:56 编辑
2011yaya2007777 发表于 2025-10-28 08:33
NBpxeserver的ipxe菜单如下:

我是在autoexec.ipxe脚本中的,不用NBpxeserver的IPXE菜单。
ipxe64.efi,默认加载脚本autoexec.ipxe,这样所有PXE服务器使用同一个ipxe脚本,方便测试比较。
回复

使用道具 举报

3882#
发表于 4 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-28 08:58 编辑

autoexec.ipxe脚本全文如下:

#!ipxe
ifopen net0
ifstat
#set quiet 1 #
set protocol http    #初始化协议变量,走http
#isset\iseq判断语句,尾部最好加 ||,否则会返回成功或失败信息后,返回BOOT MANAGER界面。
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server} #有代理dhcp信息就直接取值,智能获取启动ip
prompt --key 0x02 --timeout 2000  Press Ctrl-B for the iPXE command line... || #必须有||结尾
#console --picture http://${booturl}/boot/background.png --x 1024 --y 768 ||
console --picture /boot/background.png

:bootmenu  #启动菜单查看基本情况
    menu iPXE Boot Menu BootServer--${protocol}://${booturl}

    item --gap -- IP: ${ip}/${netmask} Mac Address:${mac}
    item --gap -- DHCP:${dhcp-server} Gateway:${gateway} DNS:${dns}
    item --gap -- next-server(proxy):${next-server}/${proxydhcp/next-server} SMBIOS UUID:${uuid}
    item --gap -- Chip:${chip} Platform:${platform} Build Arch:${buildarch} Version:${version}
    item --gap -- ================================================================================
    item --gap -- Choose BootFile
    item --key 1 boot.wim       1.  Boot boot.wim #启动boot.wim
    item --key 2 grubfm         2.  Boot grubfm #启动grubfm
    item --key 3 grub4dos       3.  Boot grub4dos #启动grub4dos


    item --gap -- Advanced options
    item --key l local          L.  Boot from local drive
    item --key d cdrom          D.  Boot from iso images
    item --key c config         C.  Configure settings   
    item --key s shell          S.  Drop to iPXE shell
    item --key r reboot         R.  Reboot computer
    item --key e exit           E.  Exit iPXE and continue BIOS boot
    item --key p poweroff       P.  Poweroff computer
    choose --timeout 10000 --default boot.wim selected #默认选boot.wim来启动
    iseq ${selected} grubfm && goto grubfm ||
    iseq ${selected} grub4dos && goto grub4dos ||
    iseq ${selected} local && goto local ||
    iseq ${selected} cdrom && goto cdrom ||
    iseq ${selected} config && config ||
    iseq ${selected} shell && shell ||
    iseq ${selected} reboot && reboot ||
    iseq ${selected} exit && exit ||
    iseq ${selected} poweroff && poweroff ||
    set bootfile ${selected} && echo bootfile:${selected} && goto wimboot  #启动菜单上选中的wim文件,也就是pe
    sleep 1 && goto wimboot

:switch_protocol #http不能启动?就改协议成tftp,然后继续启动
    console
    echo error! swich_protocol!
    set protocol tftp
    echo now boofile is ${protocol}://${booturl}/boot/${bootfile}
    sleep 1 && goto wimboot

:grubfm
#isset ${proxydhcp/dhcp-server} && chain http://${proxydhcp/dhcp-server}/app/netgrubfm/netgrubfm.${platform} proxydhcp=${proxydhcp/dhcp-server} setupwim=${setupwim=} setupiso=${setupiso=} httptimeout=${httptimeout=} autounattend=${autounattend=} ||
#chain http://${next-server}/app/netgrubfm/netgrubfm.${platform} proxydhcp=${next-server} setupwim=${setupwim=} setupiso=${setupiso=} httptimeout=${httptimeout=} autounattend=${autounattend=}

isset ${proxydhcp/dhcp-server} && chain http://${proxydhcp/dhcp-server}/app/netgrubfm/netgrubfm.${platform} ||
chain http://${next-server}/app/netgrubfm/netgrubfm.${platform}
goto end

:grub4dos #BIOS下使用grldr.pxe,ipxe-->g4d的HTTP和单纯g4d的tftp(不适用于ipxe-->g4d,会出错Disk read error)两种方式。ipxe-->g4e还不行。
iseq ${platform} pcbios && set net0/filename grldr.pxe && chain ${protocol}://${booturl}/grldr.pxe ||
iseq ${platform} efi && goto grub4efi ||
boot
goto end

:grub4efi
#config
#还不能从ipxe转G4E
#colour --basic 3 7 && cpair --foreground 7 0 #重新定义为 ANSI 黄色并将其用作默认前景色,0-黑色,1-红色,2-绿色,3-黄色,4-15蓝色或透明,5-洋红色,6-青色,7-白色,9-默认
#echo Not supported ipxe-->G4E
#cpair 0 #重置默认颜色对
#sleep 5
#set net0/filename ${protocol}://${booturl}/bootg4e.efi
set net0/filename bootg4e.efi
chain /bootg4e.efi proxy=${booturl}
#chain /bootg4e.efi
#imgload bootg4e.efi
#imgstat && sleep 5 #显示映像状态,确认用,可注释掉
#boot bootg4e.efi
goto end


:localipxe
set keep-san 1
#iseq ${platform} pcbios && sanboot --drive 0x80 ${protocol}://${booturl}/ghost.img ||
#iseq ${platform} efi && sanboot --no-describe ${protocol}://${booturl}/ghost.img ||
goto end

:cdrom #BIOS下使用memdisk(sanboot不太灵),UEFI下使用sanboot,加载ISO。
set keep-san 1
iseq ${platform} efi && sanboot --no-describe ${protocol}://${booturl}/isos/NewBeePlus_Server.iso ||
#iseq ${platform} pcbios && sanboot --drive 0xff ${protocol}://${booturl}/isos/NewBeePlus_Server.iso ||
iseq ${platform} pcbios && initrd ${protocol}://${booturl}/isos/NewBeePlus_Server.iso ||
iseq ${platform} pcbios && chain ${protocol}://${booturl}/boot/memdisk iso raw ||
goto end

:wimboot #启动菜单上选中的PE,wimboot_ipxe是适用于ipxe的版本,wimboot是适用于G4D的版本,放置于同一目录,改名区分。
    kernel ${protocol}://${booturl}/boot/wimboot_ipxe || goto switch_protocol #第一个文件都取不成功,肯定http走不起了,换tftp协议

#bootmgr.exe被压缩之后再接上一段16位程序就是bootmgr,两者不一样。
#为pxeboot.bios是pxeboot.n12改名,修改bootmgr.exe为bootmgr.pxe。
#bootmgr.pxe是bootmgr.exe改名,有校验,BCD位置由/BOOT/BCD修改为/BOOT/BCP,用PEChecksum.exe修正校验和。
#/boot/bcp是专门用于网启PE的BCD,与用于本地硬盘启动的BCD同一目录,改名区分。
#bootmgfw.pxe是原版bootmgfw.efi改名,BCD位置由/BOOT/BCD修改为/BOOT/BCP。
#BIOS
    iseq ${platform} pcbios && initrd ${protocol}://${booturl}/bootmgr.exe bootmgr.exe ||
    iseq ${platform} pcbios && initrd ${protocol}://${booturl}/boot/bcp bcd ||
    iseq ${platform} pcbios && initrd ${protocol}://${booturl}/boot/boot.sdi boot.sdi ||
    iseq ${platform} pcbios && initrd ${protocol}://${booturl}/boot/${bootfile} boot.wim ||
#UEFI
    iseq ${platform} efi && initrd -n bootx64.efi ${protocol}://${booturl}/bootmgfw.efi || ##名称首先用bootx64.efi(安全启动必须用bootx64.efi名称),bootmgfw.efi好像也可。
    iseq ${platform} efi && initrd -n bcd ${protocol}://${booturl}/boot/bcp ||
    iseq ${platform} efi && initrd -n boot.sdi ${protocol}://${booturl}/boot/boot.sdi ||
    iseq ${platform} efi && initrd -n boot.wim ${protocol}://${booturl}/boot/${bootfile} ||

#    initrd ${protocol}://${booturl}/boot/fonts/segoen_slboot.ttf segoen_slboot.ttf ||
#    initrd ${protocol}://${booturl}/boot/fonts/segoe_slboot.ttf segoe_slboot.ttf ||
#    initrd ${protocol}://${booturl}/boot/fonts/segmono_boot.ttf segmono_boot.ttf ||
#    initrd ${protocol}://${booturl}/boot/fonts/wgl4_boot.ttf wgl4_boot.ttf ||  
#    initrd ${protocol}://${booturl}/boot/resources/bootres.dll bootres.dll ||

    imgstat && sleep 1 #显示映像状态,确认用,可注释掉
#    boot ${protocol}://${booturl}/boot/wimboot_ipxe #与前面kernl语句可替换,但必须放在initrd语句后面。
    boot || goto bootmenu #启到这里不成功,说明没这个wim文件,回菜单重新选另一个文件启动

:end


回复

使用道具 举报

3883#
 楼主| 发表于 4 天前 | 只看该作者
我是在autoexec.ipxe脚本中的,不用NBpxeserver的IPXE菜单。

那就需要考虑是不是你的脚本有问题。
你试一试我提供的常规方法。
我也试一试你的脚本。把脚本传上来。

点评

按您的方法:  详情 回复 发表于 4 天前
因为使用NBpxeSERVER的IPXE菜单,就会在用其他PXE服务器测试时环境不一样。 脚本文件用上面的全文,文本文件保存一下就是。  详情 回复 发表于 4 天前
回复

使用道具 举报

3884#
发表于 4 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-28 09:20 编辑
2011yaya2007777 发表于 2025-10-28 08:58
那就需要考虑是不是你的脚本有问题。
你试一试我提供的常规方法。
我也试一试你的脚本。把脚本传上来。

因为使用NBpxeSERVER的IPXE菜单,就会在用其他PXE服务器测试时环境不一样。

脚本文件用上面的全文,文本文件保存一下就是。
至于脚本问题,在TINYPXE中测试是成功的。

可以用简化脚本测试:
#!ipxe
ifopen net0
ifstat
set protocol http    #初始化协议变量,走http
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server} #有代理dhcp信息就直接取值,智能获取启动ip
prompt --key 0x02 --timeout 2000  Press Ctrl-B for the iPXE command line... || #必须有||结尾

:bootmenu  #启动菜单查看基本情况
    menu iPXE Boot Menu BootServer--${protocol}://${booturl}
    item --gap -- Choose BootFile
    item --key 3 grub4dos       3.  Boot grub4dos #启动grub4dos


    item --gap -- Advanced options
    item --key c config         C.  Configure settings   
    item --key s shell          S.  Drop to iPXE shell
    item --key r reboot         R.  Reboot computer
    item --key e exit           E.  Exit iPXE and continue BIOS boot
    item --key p poweroff       P.  Poweroff computer
    choose --timeout 10000 --default grub4efi selected
    set net0/filename bootg4e.efi
    chain /bootg4e.efi proxy=${booturl}




回复

使用道具 举报

3885#
 楼主| 发表于 4 天前 | 只看该作者
autoexec.ipxe脚本

把autoexec.ipxe脚本保存到网起根目录 c:\usr\netboot
启动NBpxeserver,看到屏幕显示:   autoexec.ipxe                          ok
可是并没有执行autoexec.ipxe,仍然是原来的菜单。

点评

在引导文件设置中最后一行ipxe脚本文件设置为autoecec.ipxe.  详情 回复 发表于 4 天前
回复

使用道具 举报

3886#
发表于 4 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-28 09:26 编辑
2011yaya2007777 发表于 2025-10-28 09:16
把autoexec.ipxe脚本保存到网起根目录 c:%usr\netboot
启动NBpxeserver,看到屏幕显示:   autoexec.ipx ...

在NBpxeserver引导文件设置中最后一行ipxe脚本文件设置为autoexec.ipxe(原来为ipxeboot.txt). 因为官方ipxe64.efi默认使用autoexec.ipxe。所以不用设置。
不用按F8.

ScreenShot_2025-10-28_092115_679.png (23.47 KB, 下载次数: 0)

ScreenShot_2025-10-28_092115_679.png
回复

使用道具 举报

3887#
 楼主| 发表于 4 天前 | 只看该作者
在NBpxeserver引导文件设置中最后一行ipxe脚本文件设置为autoecec.ipxe

修改了,不起作用。是不是放置的位置不对?
回复

使用道具 举报

3888#
发表于 4 天前 | 只看该作者
set net0/filename bootg4e.efi
    chain /bootg4e.efi proxy=${booturl}
请教下这是什么阴间写法

点评

set net0/filename bootg4e.efi只是为了让ipxe转G4E时运行pxe命令时显示的启动文件是bootg4e.efi,没有其他用途。  详情 回复 发表于 4 天前
回复

使用道具 举报

3889#
发表于 4 天前 | 只看该作者
2011yaya2007777 发表于 2025-10-28 08:58
那就需要考虑是不是你的脚本有问题。
你试一试我提供的常规方法。
我也试一试你的脚本。把脚本传上来。

按您的方法:

ScreenShot_2025-10-28_093316_431.png (22.57 KB, 下载次数: 0)

ScreenShot_2025-10-28_093316_431.png

ScreenShot_2025-10-28_093054_185.png (3.3 KB, 下载次数: 0)

ScreenShot_2025-10-28_093054_185.png

ScreenShot_2025-10-28_093256_221.png (36.64 KB, 下载次数: 0)

ScreenShot_2025-10-28_093256_221.png
回复

使用道具 举报

3890#
发表于 4 天前 | 只看该作者
好人呐,你知道咸鱼有多少卖这个的
回复

使用道具 举报

3891#
 楼主| 发表于 4 天前 | 只看该作者
按您的方法:

你的菜单12286,这么大?
我使用的ipxe.efi是1124kb.
使用959kb的不行,使用1075kb的ipxe64.efi也不行。

ipxe.rar

486.13 KB, 下载次数: 1, 下载积分: 无忧币 -2

点评

下载文件,重命名为ipxe643.efi。按您的方式。 NBPE(G4E), /bootg4e.efi proxy=${proxydhcp/next-server}, 8006, %tftpserver% 同样的错误。  详情 回复 发表于 4 天前
回复

使用道具 举报

3892#
发表于 4 天前 | 只看该作者
江南一根葱 发表于 2025-10-28 09:32
set net0/filename bootg4e.efi
    chain /bootg4e.efi proxy=${booturl}
请教下这是什么阴间写法

set net0/filename bootg4e.efi只是为了让ipxe转G4E时运行pxe命令时显示的启动文件是bootg4e.efi,没有其他用途。
回复

使用道具 举报

3893#
发表于 4 天前 | 只看该作者
2011yaya2007777 发表于 2025-10-28 09:52
你的菜单12286,这么大?
我使用的ipxe.efi是1124kb.
使用959kb的不行,使用1075kb的ipxe64.efi也不行 ...

下载文件,重命名为ipxe643.efi。按您的方式。
NBPE(G4E), /bootg4e.efi proxy=${proxydhcp/next-server}, 8006, %tftpserver%
同样的错误。

ScreenShot_2025-10-28_104720_156.png (14.72 KB, 下载次数: 0)

ScreenShot_2025-10-28_104720_156.png

ScreenShot_2025-10-28_105016_386.png (36.81 KB, 下载次数: 0)

ScreenShot_2025-10-28_105016_386.png
回复

使用道具 举报

3894#
 楼主| 发表于 4 天前 | 只看该作者
下载文件,重命名为ipxe643.efi。按您的方式。

你的菜单menu.lst有问题。把它传上来。

点评

menu.lst应该不会有问题,因为tinypxe是正常顺利启动PE的。  详情 回复 发表于 4 天前
##调试模式开/关(on/off) debug off ##内置变量: ## @date ,输出当前日期,格式为 YYYY-MM-DD ## @time ,输出当前时间,格式为 hh:mm:ss ## @random ,产生一个 0 到 32767 之间的随机数字 ## @root ,用  详情 回复 发表于 4 天前
回复

使用道具 举报

3895#
发表于 4 天前 | 只看该作者
取消NBPXESERVER的iPXE菜单选项,引导文件中的iPXE脚本文件改为autoexec.ipxe。UEFI64启动文件使用ipxe643.efi。

这样就会使用autoexec.ipxe脚本。同样出错。

ScreenShot_2025-10-28_104309_663.png (17.43 KB, 下载次数: 0)

ScreenShot_2025-10-28_104309_663.png

ScreenShot_2025-10-28_105452_625.png (16.04 KB, 下载次数: 0)

ScreenShot_2025-10-28_105452_625.png

ScreenShot_2025-10-28_105525_494.png (19.87 KB, 下载次数: 0)

ScreenShot_2025-10-28_105525_494.png
回复

使用道具 举报

3896#
发表于 4 天前 | 只看该作者
2011yaya2007777 发表于 2025-10-28 10:55
你的菜单menu.lst有问题。把它传上来。

##调试模式开/关(on/off)
debug off

##内置变量:
## @date ,输出当前日期,格式为 YYYY-MM-DD
## @time ,输出当前时间,格式为 hh:mm:ss
## @random ,产生一个 0 到 32767 之间的随机数字
## @root ,用来保存当前root的驱动器号
## @path ,用来保存当前默认外部命令查找路径
## @retval (即 0x4cb00处值) ,获取命令的返回值或其他结果
## ?_WENV 等同于 内置变量 ?_UUID
## ?_UUID (注意大写),用来保存使用uuid命令获取到的磁盘uuid值
## %?% ,用来保存命令返回的字符串信息
## ?_BOOT变量(@boot),访问启动GRUB4DOS的Boot_drive
## @uefi,(0x8272)值为64/32,用于判断UEFI系统是64/32位。00是BIOS系统。

##wimboot下载地址 https://github.com/chenall/grubutils/releases/latest
##ntloader和initrd.cpio下载地址 https://github.com/grub4dos/ntloader/releases/latest
##ipxe.efi下载地址 https://boot.ipxe.org/
##ipxe.bios需要编译成自动引导外置脚本autoexec.ipxe
##ipxefm下载地址 https://github.com/zwj4031/ipxefm  https://github.com/zwj4031/netgrubfm
##grubfm下载地址 https://github.com/a1ive/grub2-filemanager/releases
## https://a1ive.github.io/
##G4D和G4E及其外部命令下载地址 https://github.com/chenall/grub4dos/releases

##内部变量:
## 0x82a0保存的是当前根所在的驱动器(current root drive)
## 0x829c保存的是当前根分区号(current root partition)
## 0x8208保存的是启动分区号(the boot partition)
## 0x8280保存的是启动驱动器号(boot_drive)
## 0x8312,避免重入主菜单时重复设置图形模式、加载背景图及字库。
## 0x8272(1字节) UEFI 启动环境(32/64位)
## calc *0x8312&1 > nul || graphicsmode -1 800
## calc *0x8312&2 > nul || splashimage /boot/grub/lt.jpg
## calc *0x8312&4 > nul || font /boot/grub/unifont.hex.gz
## 加载字库
##font [--font-high=24] [--simp=] 文件名
##    例子:  font /my.hex
##                font --font-high=24 --simp=  /24.hex
##  内置字库,如果不是 16*16 字体,头部需声明:DotSize=24,simp
##显示模式,要放在最前,运行graphicsmode显示支持的模式
#graphicsmode 256
calc *0x8312&1 > nul || graphicsmode -1 800
calc *0x8312&2 > nul || splashimage ()/boot/background.jpg
calc *0x8312&4 > nul || font --font-high=22 ()/boot/hk22.hex

##判断启动方式,设置变量
if %@uefi%#==# && set bt=BIOS && set ph=/boot ! set bt=EFI_x%@uefi% && set ph=/efi

## EFI启动时加载截图模块,按左Ctrl+左Alt+F12截图,图片以8位数字.png的形式保存在第一个找到的FAT16/FAT32分区。
if %bt%==EFI_x64 load -n /EFI/tool/CrScreenshotDxe.efi

##定位WINDOWS系统分区,如果存在多个WINDOWS系统分区,只定位首先找到的分区!可改为设定查找定位文件来确定。
if "%@boot%"=="(pd)" || find --set-root /windows | set win=
set uefi-v=1
if "%@boot%"=="(pd)" && echo --uefi-v  | set uefi_v=

##计算物理硬盘数,检查是否存在GPT分区的硬盘
rootnoverify (hd-1)
set /a hdn=*0x82a0&0xff-127
find checkrange 0xEE parttype && set pt="警告:存在GPT类型的硬盘!!!" ! set pt=""
if "%@boot%"=="(pd)" && set bt=PXE_V_%uefi_v:~15,5% && set hdn=未知 && set pt=""
root %@boot%
if "%@boot%"=="(pd)" && set http
set root2==%@root%
if not %root2%==%@boot% && echo "启动分区与目前根分区不一致,将查找启动分区并设置为根分区!!!" && pause --wait=5
find --set-root /boot/hk22.hex

##热键设置(在字库加载后运行,会出错? error:not enough space!)
%ph%/ext/hotkey -A [F4] commandline
%ph%/ext/hotkey -A [F3] reboot
##设置热键颜色
setmenu --hotkey-color=0xffff00

##更多菜单编辑功能、动画、图像菜单等等,可参考http://bbs.wuyou.net/forum.php?m ... 9720&extra=page%3D3
##加载透明背景的图像    splashimage [--offset=[type]=[x]=[y]] FILE
##类型[type]:bit 7: 透明背景
##  1.增加图像背景色设置方法。    splashimage --fill-color=[0xrrggbb]
##    作用之一,作为小图像的背景。
##    作用之二,直接作为菜单的背景(即不加载图像背景)。此时只设置字体的前景色即可。
##  2.增加动画菜单。    splashimage --animated=[type]=[delay]=[last_num]=[x]=[y] START_FILE
##    类型[type]:bit 0-3: 播放次数    bit 4: 永远重复    bit 7: 透明背景
##                      type=00: 禁止播放
##                播放n次:序列图像各显示n次,时间独占。可作为启动前导、序幕。
##                永远重复:序列图像无限循环,时间与菜单共享。可作为菜单里的动画。
##                背景透明:即抠像。要求4角像素为背景色。
##                                背景色最好为白色或黑色,这样可以去除一些灰色杂波。若是彩色背景,则应当非常干净。
##                提醒:请以16进制方式输入。否则易错。
##    延迟[delay]:序列图像之间的延迟。单位是滴答,即1/18.2秒。
##    序列数[last_num]:序列图像总数(2位数,从1开始计数)。
##    偏移[x]、[y]:图像偏移,单位像素。
##    起始文件名[START_FILE]命名规则:*n.???   n: 1-9 或 01-99 或 001-999。

##########################################################################
## 0x00黑色black     0x01蓝色blue          0x02绿色green       0x03青色cyan
## 0x04红色red       0x05紫色magenta       0x06棕色brown       0x07灰色gray
## 0x08暗灰dark-gray 0x09亮蓝light-blue    0x0A亮绿light-green 0x0B亮青light-cyan
## 0x0C亮红light-red 0x0D亮紫light-magenta 0x0E黄色yellow      0x0F白色white
## 简化:可直接用后两位字符表示,如红色04,heading、border的颜色。
## 注意:好像有些位置只能用6位或4位的24位色表示,如keyhelp、timeout、string、hotkey-color。
## 颜色:24位色  0x红红绿绿蓝蓝,0xffff00红+绿=黄,0xff00ff红+蓝=紫,0x222222灰色
##########################################################################
##颜色  菜单文字         选择高亮          帮助信息          版本信息         边框
##color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00 border=0x99
color normal=0x0F highlight=0x0A helptext=0x05 heading=02 border=01
##echo -P:XXYY $[ABCD]MESSAGE
##-P为大写;XX为横坐标,YY为纵坐标。用$[ABCD]来指定后面显示的字符使用的颜色。
##A 值为1时闪烁 (blinking foreground color),B 值为1时高亮(light),C [0-7]背景色(background color),D [0-7]前景色-字体颜色(foreground color)。

##--box x=[x] y=[y] w=[w] h=[h] l=[l] 菜单项标题起始列,起始行,每行最大字符数,最大菜单项数,菜单框线条宽度(像素);
##    注:w=0 表示水平居中。此时 w 应当在 x 之后;
##       l=0 表示不显示菜单框;
##--ver-on --ver-off 版本信息打开/关闭。默认打开;
setmenu --box x=9 w=0 y=8 h=10 l=10    --ver-on

##--lang=en --lang=zh 菜单帮助信息中英文切换。默认英文;
##--timeout=[x]=[y]=[color] 倒计时位置、颜色。单位:列,行,24位色彩.
##    注:x=y=0 默认位于选中项目的尾部;
##          color=0 默认 "color highlight"。
setmenu --lang=zh  --timeout=5=6=0xffff00

##--help=[x]=[w]=[y] 帮助位置。单位:列,行;    注:x=0 由边框确定(默认);w=0 水平居中;
setmenu --help=8=0=19

##--keyhelp=[y_offset]=[color] 按键帮助位置,颜色。单位:列,行,24位色彩;
##    注:y_offset=0,项目与按键帮助位于同一区域,项目帮助可以覆盖按键帮助(默认);
##          y_offset != 0,按键帮助到项目帮助的行偏移,项目帮助与按键帮助共存;
##          y_offset<=4,项目帮助的显示行数;
setmenu --keyhelp=2=0xffff00

##  --string=[x]=[y]=[color]=["string“] 字符串位置、颜色与内容,可用于标题,说明,帮助等。单位:列,行,24位色彩;
##    注:如果省略颜色,位于菜单框以上按标题颜色,位于菜单框以下按帮助颜色;
##          字符串头尾要加英文双引号;
##          列数=图像水平像素/(字符宽+字符间距)   字符宽=8;
##          行数=图像垂直像素/(字符高+行间距)      字符高=10;
##setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd  HH:mm:ss"

##提示硬盘数量,类型,启动方式
setmenu --string=7=2=0xffff00="%pt:~1,-1%"
setmenu --string=7=3=0xffff00="===%@date%,启动方式:%bt%====小楼一夜听春雨==="
setmenu --string=7=5=0xff00ff="硬盘数量:%hdn%,启动分区@boot:%@boot%,根分区:%@root%"
##菜单自动编号
## --auto-num-off --auto-num-on 关闭/打开菜单自动编号。默认关闭;
##  --left-align --right-align 菜单左对齐/右对齐。默认左对齐。
##  --font-spacing=[font]:[line] 设置字符间距/行间距。单位:像素。默认0。应当位于下面的参数之前;
setmenu --auto-num-on

##PXE启动错误提示,服务器G4D启动文件使用内置菜单或其他外置菜单。
if "%@boot%"=="(pd)" && if %@uefi%#==# && echo "错误:PXE启动,服务器端启动文件为EFI,客户端为BIOS,10秒后关闭客户端" && pause --wait=10 && halt

##根据启动方式不同,设置启动文件参数。
if %@uefi%#==# && set mn1="/bootmgr" ! set mn1="/microsoft/boot/bootmgfw.efi"

##查看G4E获取的PXE服务器地址
# pxe
# pause

###################菜单开始###################

default 0
timeout 6
##倒计时进度条ProgressBar [--no-box] 左上角x 左上角y x尺寸 y尺寸 颜色 模式
%ph%/ext/ProgressBar 82 136 636 16 0x00ff00 1

iftitle [if "%@boot%"=="(pd)"] 从PXE服务器端EFI启动10pe(/boot/boot.wim)
##EFI下使用ntboot进行PXE启动。
#set http
if %@uefi%==64 && set gbk2uni=/efi/ext/gbk2uni && /efi/ext/ntboot /boot/boot.wim
##EFI下使用wimboot进行PXE启动。
##bcp中钩选了禁用数字签名驱动验证,适应wimboot启动。
##bcd设置中启动文件留空,BIOS和EFI通用。bcd中的内存盘参数要设置RamdiskTftpBlockSize=20480或者RamdiskTftpBlockSize=32768,tftp速度更快。
#if %@uefi%==64 && kernel ()/boot/wimboot && initrd @bootx64.efi=/boot/bootmgfw.efi @bcd=/boot/bcp @boot.sdi=/boot/boot.sdi @boot.wim=/boot/boot.wim
boot

iftitle [if "%@boot%"=="(pd)"] 从PXE服务器端启动pe(NewBeePlus_Server.iso)\n用于G4E网启ISO测试
set http
if %@uefi%==64 && map /isos/NewBeePlus_Server.iso (0xff) && chainloader (0xff)
boot

title 快速启动 WINDOWS 10\n快速启动硬盘上的windows10系统
##除系统引导分区外,其他分区根目录无bootmgr。
if %@uefi%#==# && find --set-root /bootmgr && chainloader /bootmgr
##用延时为0的bcd00文件覆盖bcd文件, 默认启动WINDOWS10
##bcd设置中启动文件留空,BIOS和EFI通用。
#if %@uefi%==64 && chainloader /efi/microsoft/boot/bootmgfw.efi
if %@uefi%==64 && dd if=%@root%/bcd/bcd00 of=%@root%/efi/microsoft/boot/bcd && chainloader /efi/microsoft/boot/bootmgfw.efi
boot

#title 安装/更新 WINDOWS\nBIOS安装/更新WINDOWS系统时使用,除系统引导分区外,其他分区根目录无bootmgr。
#if %@uefi%==64 && chainloader %ph%%mn1:~1,-1% && boot
#set key=N
#set /p key=请选择S键为安装,U键为更新:
#set /u key=%key%
#set key1=0
#if %key%==U set key1=1 && chainloader %ph%%mn1:~1,-1% && boot
#if %key%==S set key1=1 && find --set-root /bootmgr && chainloader %ph%%mn1:~1,-1% && boot
##echo -P:XXYY $[ABCD]MESSAGE
##-P为大写;XX为横坐标,YY为纵坐标。用$[ABCD]来指定后面显示的字符使用的颜色。
##A 值为1时闪烁 (blinking foreground color),B 值为1时高亮(light),C [0-7]背景色(background color),D [0-7]前景色-字体颜色(foreground color)。
#if %key1%==0 && echo -P:1025 $[0005]输入错误,5秒后重启。 && pause --wait=5
#reboot

title 用BCD启动 WINDOWS 和 WINPE\n用BCD启动硬盘上的 WINDOWS 系统和 WINPE
##用延时为30的bcd30文件覆盖bcd文件,显示带PE启动项的多启动项菜单。
##bcd设置中启动文件留空,BIOS和EFI通用。
if %@uefi%#==# && dd if=%@root%/bcd/bcd30 of=%@root%/boot/bcd ! dd if=%@root%/bcd/bcd30 of=%@root%/efi/microsoft/boot/bcd
chainloader %ph%%mn1:~1,-1%
boot

title 用RUN启动 WINDOWS\n BCD出问题时用此菜单
if %@uefi%#==# && set mn2="/boot/ext/SISO NTBOOT NT6=%win%" ! set mn2="/efi/ext/ntboot %win%/win"
%mn2:~1,-1%
boot

title 用RUN、ntloader、wimboot启动WIM格式WIN10PE-X64\n BCD出问题时用此菜单启动WIN10PE(/boot/boot.WIM)
##用RUN启动WIM格式PE
#%ph%/ext/RUN /boot/boot.wim

##用ntloader启动NT6+ WIM,BIOS与EFI通用
#uuid ()
#kernel /boot/ext/ntloader uuid=%?_UUID% wim=/boot/boot.wim
#initrd /boot/ext/initrd.cpio

##用wimboot启动
##bcd设置中启动文件留空,BIOS和EFI通用。bcp中钩选了禁用数字签名驱动验证,适应wimboot启动。
kernel /boot/wimboot
if %@uefi%#==# && initrd @bootmgr.exe=/boot/bootmgr.exe @bcd=/boot/bcp @boot.sdi=/boot/boot.sdi @boot.wim=/boot/boot.wim
if %@uefi%==64 && initrd @bootx64.efi=/boot/bootmgfw.efi @bcd=/boot/bcp @boot.sdi=/boot/boot.sdi @boot.wim=/boot/boot.wim
boot

title 启动RAMOS-WIN10系统\n启动SSIC-WIN10-20241225-8504
#if %@uefi%==64 && find --ignore-floppies --ignore-cd --set-root /EFI/tool/ntfs_x64.efi
##我的UEFI固件支持ntfs,所以不需要加载ntfs驱动,bootmgfw.efi不认识ntfs,读取BCD的时候需要ntfs驱动(BCD在ntfs分区时)。
#if %@uefi%==64 && load /EFI/tool/ntfs_x64.efi
find --ignore-floppies --ignore-cd --set-root /VHD/SSIC-WIN10-20241225-1509.vhd
##BIOS下需要--top的map参数加载至高端内存。
if %@uefi%#==# && map --mem --top /VHD/SSIC-WIN10-20241225-1509.vhd (hd)
##UEFI下不需要--top的map参数。
if %@uefi%==64 && map --mem /VHD/SSIC-WIN10-20241225-1509.vhd (hd)
##G4D下必须要map --hook,磁盘映射项目不存在,map --rehook 将不执行任何动作。但如果是 map --hook,则会报错。G4E下不需要会自动执行map --hook。
if %@uefi%#==# && map --rehook
root (hd-1,0)
if %@uefi%#==# && chainloader /bootmgr ! chainloader /efi/boot/bootx64.efi
boot

title 运行grubfm(grub2)和efi工具/efi/tool\n运行grubfm(grub2)和efi工具/efi/tool
if %@uefi%#==# && map --mem /efi/grub2/grubfm.iso (0xff) && map --rehook && chainloader (0xff) ! chainloader /efi/grub2/grubfmx64.efi
boot

##很奇怪,这里不能用[if %bt%==BIOS]
iftitle [if %@uefi%#==#] 启动 0PE\n启动/0pe/0pe.iso
map --mem /0pe/0pe.iso (0xff)
##G4D下必须要map --hook,磁盘映射项目不存在,map --rehook 将不执行任何动作。但如果是 map --hook,则会报错。
map --rehook
chainloader (0xff)
boot

title [F4]进入命令行commandline\n进入命令行
commandline

iftitle [if %@uefi%==64] 启动 ventoy\n启动/efi/grub2/ventoy.vhd
map /efi/grub2/ventoy.vhd (hd)
chainloader (hd-1,0)+1
boot

iftitle [if %@uefi%==64] 启动 rEFInd\n启动/efi/rEFInd/refind_x64.efi
chainloader /efi/rEFInd/refind_x64.efi
boot

title 查找2级目录深度.iso.wim.img.vhd映像文件\n运行.iso.wim.img.vhd下映像文件(可加参数/imgs/限定目录)
%ph%/ext/RUN --mem --noload --top --set-showsize=0 --automenu-all show.iso.wim.img.vhd subdir=2
boot

title 启动存在的光盘(cd0)
chainloader (cd0)

title [F3]重启reboot\n重启电脑
reboot

title 关机halt\n关闭电脑(无法正常关机,在设置-系统-电源和睡眠-其他电源设置-选择电源按钮的功能-更改当前不可用的设置-取消"启用快速启动")
halt
回复

使用道具 举报

3897#
发表于 4 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-28 11:10 编辑
2011yaya2007777 发表于 2025-10-28 10:55
你的菜单menu.lst有问题。把它传上来。

menu.lst应该不会有问题,因为tinypxe是正常顺利启动PE的。

ScreenShot_2025-10-28_110814_421.png (79.3 KB, 下载次数: 0)

ScreenShot_2025-10-28_110814_421.png

ScreenShot_2025-10-28_110833_831.png (78.08 KB, 下载次数: 0)

ScreenShot_2025-10-28_110833_831.png

ScreenShot_2025-10-28_110851_028.png (2.42 KB, 下载次数: 0)

ScreenShot_2025-10-28_110851_028.png

ScreenShot_2025-10-28_111013_471.png (471.22 KB, 下载次数: 0)

ScreenShot_2025-10-28_111013_471.png
回复

使用道具 举报

3898#
 楼主| 发表于 4 天前 | 只看该作者
menu.lst应该不会有问题,因为tinypxe是正常顺利启动PE的。

你说的很对。
问题重现,这时最关键的。下午排查一下。
回复

使用道具 举报

3899#
发表于 3 天前 | 只看该作者
本帖最后由 mygamexxx 于 2025-10-29 08:25 编辑
2011yaya2007777 发表于 2025-10-28 11:42
你说的很对。
问题重现,这时最关键的。下午排查一下。

问题能重现吗?
zenEMU测试卡在Copy data from the network via HTTP, please wait....
回复

使用道具 举报

3900#
发表于 3 天前 | 只看该作者
很多PE用G4E启动后分辨率过低的,但用G4D和ventoy启动没这个问题,请问可以修正一下吗?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-11-1 07:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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