|
本帖最后由 mygamexxx 于 2024-12-5 13:08 编辑
在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
#显示模式,要放在最前,运行graphicsmode显示支持的模式
#graphicsmode 256
calc *0x8312&1 > nul || graphicsmode -1 800
##判断启动方式,设置变量
if %@uefi%#==# && set bt=BIOS && set ph=/boot ! set bt=EFI_x%@uefi% && set ph=/efi
#定位WINDOWS系统分区,如果存在多个WINDOWS系统分区,只定位首先找到的分区!可改为设定查找定位文件来确定。
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="==========================="
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 ... 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。
calc *0x8312&2 > nul || splashimage /boot/background.jpg
#font [--font-high=24] [--simp=] 文件名
# 例子: font /my.hex
# font --font-high=24 --simp= /24.hex
# 内置字库,如果不是 16*16 字体,头部需声明:DotSize=24,simp
# 加载字库
calc *0x8312&4 > nul || font --font-high=22 /boot/hk22.hex
# EFI启动时加载截图模块,按左Ctrl+左Alt+F12截图,图片以8位数字.png的形式保存在第一个找到的FAT16/FAT32分区。
if %bt%==EFI_x64 load -n /EFI/grub/CrScreenshotDxe.efi
#######################################################################################
## 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=0x0F highlight=0x0A helptext=0x05 heading=02 border=01
#color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00 border=0x99
#setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd HH:mm:ss"
#颜色:24位色 0x红红绿绿蓝蓝
#菜单自动编号
# --auto-num-off --auto-num-on 关闭/打开菜单自动编号。默认关闭;
# --left-align --right-align 菜单左对齐/右对齐。默认左对齐。
# --font-spacing=[font]:[line] 设置字符间距/行间距。单位:像素。默认0。应当位于下面的参数之前;
setmenu --auto-num-on
##--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=9=3=0xffff00="%pt:~1,-1%==%@date%==小楼一夜听春雨=="
setmenu --string=9=5=0xff00ff="硬盘数量:%hdn%,启动分区:%@boot%,启动方式:%bt%"
###################菜单开始###################
if %bt%==BIOS && set mn1="chainloader %@boot%%ph%/bootmgr" ! set mn1="chainloader %@boot%%ph%/microsoft/boot/bootmgfw.efi"
default 0
timeout 6
title 快速启动 WINDOWS\n快速启动硬盘上的系统
#下面注释掉,尽量不用外部命令,防止版本更新影响
#if %bt%==BIOS && 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 %bt%==BIOS && dd if=%@boot%%ph%/bcd0 of=%@boot%%ph%/bcd ! dd if=%@boot%%ph%/microsoft/boot/bcd0 of=%@boot%%ph%/microsoft/boot/bcd
%mn1:~1,-1%
boot
title 用BCD启动 WINDOWS\n用BCD启动硬盘上的系统
#用延时为30的bcd30文件覆盖bcd文件,显示带PE启动项的菜单
if %bt%==BIOS && dd if=%@boot%%ph%/bcd30 of=%@boot%%ph%/bcd ! dd if=%@boot%%ph%/microsoft/boot/bcd30 of=%@boot%%ph%/microsoft/boot/bcd
%mn1:~1,-1%
boot
title 启动WIM格式WIN10PE-X64\n启动/0pe/10PE.WIM
#下面注释掉,尽量不用外部命令,防止版本更新影响
#%@boot%%ph%/ext/RUN %@boot%/0pe/10pe.wim
#用延时为0的bcdpe文件覆盖bcd文件,直接启动10PE
if %bt%==BIOS && dd if=%@boot%%ph%/bcdpe of=%@boot%%ph%/bcd ! dd if=%@boot%%ph%/microsoft/boot/bcdpe of=%@boot%%ph%/microsoft/boot/bcd
%mn1:~1,-1%
boot
title 运行任意映像文件\n运行/imgs/下映像文件,必须用外部命令了
%@boot%%ph%/ext/RUN --mem --noload --top --set-showsize=0 --automenu show.iso.wim.img /imgs/
boot
#很奇怪,这里不能用[if %bt%==BIOS]
iftitle [if %@uefi%#==#] 启动 0PE\n启动%@boot%/0pe/0pe.iso
map --mem %@boot%/0pe/0pe.iso (0xff)
map --hook
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
|
评分
-
查看全部评分
|