|
本帖最后由 mygamexxx 于 2025-2-17 17:01 编辑
在MBR的硬盘(WEE作为主引导记录,GPT的硬盘在BIOS启动时要修正引导方式)1-2GB的FAT32格式的ESP隐藏分区中,放入PE与BIOS和UEFI启动模块。BIOS启动使用WEE查找/boot/grub/grldr启动,该grldr内置菜单修改为查找/efi/grub/menu.lst的G4D和G4E共用菜单。G4D的外部命令在/boot/ext,G4E的外部命令在/efi/ext。
菜单内容:
##内置变量:
## @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系统。
##内部变量:
## 0x82a0保存的是当前根所在的驱动器(current root drive)
## 0x829c保存的是当前根分区号(current root partition)
## 0x8208保存的是启动分区号(the boot partition)
## 0x8280保存的是启动驱动器号(boot_drive)
## 0x8312,避免重入主菜单时重复设置图形模式、加载背景图及字库。
## 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/grub/CrScreenshotDxe.efi
##定位WINDOWS系统分区,如果存在多个WINDOWS系统分区,只定位首先找到的分区!可改为设定查找定位文件来确定。
if "%@boot%"=="(pd)" || find --set-root /windows | set win=
##计算物理硬盘数,检查是否存在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 && set hdn=未知 && set pt="==========================="
root %@boot%
##热键设置(在字库加载后运行,会出错? 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 ... &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
## 0x08暗灰dark-gray 0x09亮蓝light-blue 0x0A亮绿light-green 0x0B亮青light-cyan
## 0x04红色red 0x05紫色magenta 0x06棕色brown 0x07灰色gray
## 0x0C亮红light-red 0x0D亮紫light-magenta 0x0E黄色yellow 0x0F白色white
#######################################################################################
##颜色 菜单文字 选择高亮 帮助信息 版本信息 边框
##color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00 border=0x99
color normal=0x0F highlight=0x0A helptext=0x05 heading=02 border=01
##--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=8=6=0xff00
##--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=0x222222
## --string=[x]=[y]=[color]=["string“] 字符串位置、颜色与内容,可用于标题,说明,帮助等。单位:列,行,24位色彩;
## 注:如果省略颜色,位于菜单框以上按标题颜色,位于菜单框以下按帮助颜色;
## 字符串头尾要加英文双引号;
## 列数=图像水平像素/(字符宽+字符间距) 字符宽=8;
## 行数=图像垂直像素/(字符高+行间距) 字符高=10;
##setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd HH:mm:ss"
##颜色:24位色 0x红红绿绿蓝蓝
##提示硬盘数量,类型,启动方式
setmenu --string=9=3=0xffff00="%pt:~1,-1%==%@date%==小楼一夜听春雨=="
setmenu --string=9=5=0xff00ff="硬盘数量:%hdn%,启动分区:%@boot%,启动方式:%bt%"
##菜单自动编号
## --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.exe" ! set mn1="/microsoft/boot/bootmgfw.efi"
###################菜单开始###################
default 0
timeout 6
#title 安装 WINDOWS\n安装WINDOWS系统时使用,一般不想使用。
#if %@uefi%#==# && chainloader /bootmgr ! chainloader /efi/microsoft/boot/bootmgfw.efi
#chainloader
#boot
iftitle [if "%@boot%"=="(pd)"] 从PXE服务器端启动10pe(boot.wim)
##EFI下使用ntboot进行PXE启动。
if %@uefi%==64 && /efi/ext/ntboot (http)/boot/boot.wim
##EFI下使用wimboot进行PXE启动。
#if %@uefi%==64 && kernel ()/boot/wimboot && initrd @bootx64.efi=/boot/bootmgfw.efi @bcd=/boot/bcdpxe @boot.sdi=/boot/boot.sdi @boot.wim=/boot/boot.wim
boot
title 快速启动 WINDOWS\n快速启动硬盘上的系统
##下面注释掉,尽量不用外部命令,防止版本更新影响
#if %@uefi%#==# && set mn2="%@boot%%ph%/ext/SISO NTBOOT NT6=%win%" ! set mn2="%@boot%%ph%/ext/ntboot %win%/win"
#%mn2:~1,-1%
##用延时为0的bcd0文件覆盖bcd文件, 默认启动WINDOWS10
if %@uefi%#==# && dd if=%@boot%/boot/bcd0 of=%@boot%%ph%/bcd ! dd if=%@boot%/boot/bcd0 of=%@boot%%ph%/microsoft/boot/bcd
chainloader %@boot%%ph%%mn1:~1,-1%
boot
title 用BCD启动 WINDOWS\n用BCD启动硬盘上的系统
##用延时为30的bcd30文件覆盖bcd文件,显示带PE启动项的多启动项菜单
if %@uefi%#==# && dd if=%@boot%/boot/bcd30 of=%@boot%%ph%/bcd ! dd if=%@boot%/boot/bcd30 of=%@boot%%ph%/microsoft/boot/bcd
chainloader %@boot%%ph%%mn1:~1,-1%
boot
title 启动WIM格式WIN10PE-X64\n启动/boot/boot.WIM,bcdxpe中钩选了禁用数字签名驱动验证,适应wimboot启动。
##下面注释掉,尽量不用外部命令,防止版本更新影响
#%@boot%%ph%/ext/RUN %@boot%/boot/10pe.wim
##用wintoflash大修改的wimboot2.7.5启动
#kernel %@boot%/boot/wimboot
#if %@uefi%#==# && initrd @bootmgr=/pxe/bootmgr.exe @bcd=/boot/bcdxpe @boot.sdi=/boot/boot.sdi @boot.wim=/boot/boot.wim
#if %@uefi%==64 && initrd @bootx64.efi=/pxe/bootmgfw.efi @bcd=/boot/bcdxpe @boot.sdi=/boot/boot.sdi @boot.wim=/boot/boot.wim
##用延时为0的bcdpe文件覆盖bcd文件,直接启动10PE
if %@uefi%#==# && dd if=%@boot%/boot/bcdpxe of=%@boot%%ph%/bcd ! dd if=%@boot%/boot/bcdpxe of=%@boot%%ph%/microsoft/boot/bcd
chainloader %@boot%%ph%%mn1:~1,-1%
boot
title 启动RAMOS-WIN10系统\n启动SSIC-WIN10-20241225-8504
#if %@uefi%==64 && find --ignore-floppies --ignore-cd --set-root /EFI/grub/ntfs_x64.efi
##我的UEFI固件支持ntfs,所以不需要加载ntfs驱动,bootmgfw.efi不认识ntfs,读取BCD的时候需要ntfs驱动(BCD在ntfs分区时)。
#if %@uefi%==64 && load /EFI/grub/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 运行任意映像文件\n运行/imgs/下映像文件,必须用外部命令了
%@boot%%ph%/ext/RUN --mem --noload --top --set-showsize=0 --automenu show.iso.wim.img /imgs/
boot
title 运行grubfm_multiarch\n运行grubfm_multiarch,/0pe/grubfm_pc.iso映像ksafer大20230627编译的
if %@uefi%#==# && map --mem /0pe/grubfm.iso (0xff) && map --rehook && chainloader (0xff) ! chainloader /efi/boot/grubfmx64.efi
boot
##很奇怪,这里不能用[if %bt%==BIOS]
iftitle [if %@uefi%#==#] 启动 0PE\n启动%@boot%/0pe/0pe.iso
map --mem %@boot%/0pe/0pe.iso (0xff)
##G4D下必须要map --hook,磁盘映射项目不存在,map --rehook 将不执行任何动作。但如果是 map --hook,则会报错。
map --rehook
chainloader (0xff)
boot
iftitle [if %@uefi%==64] 启动 rEFInd\n启动%@boot%%ph%/rEFInd/refind_x64.efi
chainloader %@boot%%ph%/rEFInd/refind_x64.efi
boot
title [F4]进入命令行commandline\n进入命令行
commandline
title 启动存在的光盘(cd0)
chainloader (cd0)
title [F3]重启reboot\n重启电脑
reboot
title 关机halt\n关闭电脑(无法正常关机,在设置-系统-电源和睡眠-其他电源设置-选择电源按钮的功能-更改当前不可用的设置-取消"启用快速启动")
halt
|
评分
-
查看全部评分
|