无忧启动论坛

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

[分享] G4D与G4E共用菜单的优化

  [复制链接]
跳转到指定楼层
1#
发表于 2024-12-2 12:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

评分

参与人数 2无忧币 +7 收起 理由
gutaiping2006 + 5 很给力!
dfw9 + 2 赞一个!

查看全部评分

2#
发表于 2024-12-2 12:51:46 | 只看该作者

谢谢分享
回复

使用道具 举报

3#
发表于 2024-12-2 13:00:10 | 只看该作者
谢谢,收藏起
回复

使用道具 举报

4#
发表于 2024-12-2 13:21:08 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

5#
发表于 2024-12-2 13:50:26 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
发表于 2024-12-2 13:56:40 | 只看该作者
谢谢楼主分享!
回复

使用道具 举报

7#
发表于 2024-12-2 14:07:27 | 只看该作者
看不懂,来学习
回复

使用道具 举报

8#
发表于 2024-12-2 14:28:35 | 只看该作者
感谢分享
回复

使用道具 举报

9#
发表于 2024-12-2 15:19:19 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

10#
发表于 2024-12-2 15:22:06 | 只看该作者
感谢分享
回复

使用道具 举报

11#
发表于 2024-12-2 18:01:52 | 只看该作者
谢谢分享
回复

使用道具 举报

12#
发表于 2024-12-3 07:31:46 | 只看该作者

谢谢分享
回复

使用道具 举报

13#
发表于 2024-12-3 10:53:27 | 只看该作者
谢谢楼主分享!!!
回复

使用道具 举报

14#
发表于 2024-12-3 11:11:45 | 只看该作者
谢谢分享
回复

使用道具 举报

15#
发表于 2024-12-5 11:03:37 | 只看该作者
学到了,非常详尽的注释
回复

使用道具 举报

16#
发表于 2024-12-6 14:42:32 | 只看该作者
学习
回复

使用道具 举报

17#
发表于 2024-12-20 00:51:17 | 只看该作者
学习一下,谢谢分享
回复

使用道具 举报

18#
发表于 2025-1-17 12:19:42 | 只看该作者

谢谢楼主分享!!!  很详细
回复

使用道具 举报

19#
发表于 2025-1-17 12:29:12 | 只看该作者
多谢分享
回复

使用道具 举报

20#
发表于 2025-1-21 18:20:30 | 只看该作者
谢谢分享
回复

使用道具 举报

21#
发表于 2025-2-8 14:52:19 | 只看该作者
谢谢,收藏起
回复

使用道具 举报

22#
发表于 2025-2-8 15:43:23 | 只看该作者
感谢分享,学习一下
回复

使用道具 举报

23#
发表于 2025-2-8 15:58:13 | 只看该作者
谢谢分享
回复

使用道具 举报

24#
发表于 昨天 18:07 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

25#
发表于 昨天 22:54 来自手机 | 只看该作者
不错,支持技术分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-18 09:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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