GRLDR外部MENU.LST调用GRLDR内部菜单

在外部MENU.LST调用GRLDR内部菜单的问题

由于用了FBINST。U盘有了UD独立空间,于是,把基本不变的维护工具放进UD。而在U盘的UD外部存放以后会常更换的维护工具,GRLDR内部菜单负责选择UD内部工具,外部MENU.LST选择外部工具。中间可以在两个菜单间切换。两套菜单如下:
一:GRLDR内置菜单:
background 008080
fontfile (ud)/Fonts.gz
timeout 30
default 2

title                                   U盘维护系统
clear

title ---------------------------------------------------------------
clear

title [01] 启动Windows PE预安装环境
map (ud)/winpe.iso (0xFF)             
map --hook                                  
chainloader (0xFF)

title [02] 启动MAXDOS工具箱
map (ud)/MAXDOS.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title [03] 启动UD外部GRUB4DOS菜单
errorcheck off
configfile /boot/grub/menu.lst
configfile /menu.lst
configfile /grub/menu.lst
find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
errorcheck on
commandline

title ---------------------------------------------------------------
root

title [04] 启动本机Windows NT/2K/XP/2003系统
fallback 7
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr

title [05] 启动本机VISTA/2008/Windows7系统
fallback 8
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /bootmgr

title [06] 启动本机Windows 9x/Me系统
fallback 6
find --set-root /io.sys
chainloader /io.sys

title ---------------------------------------------------------------
root

title [07] 从硬盘引导系统
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0)+1
title [08] 从光驱引导系统
cdrom --init || cdrom --stop
map --rehook
geometry (hd999) || pause --wait=0
root (cd0)    || pause --wait=5 Not found CDROM! 找不到光驱!
chainloader (cd0) && boot
chainloader (cd1) && boot
chainloader (cd2) && boot
chainloader (cd3) && boot
chainloader (cd4) && boot
chainloader (cd5) && boot
chainloader (cd6) && boot
chainloader (cd7) && boot
chainloader (cd8) && boot
chainloader (cd9) && boot

title [R]    重启计算机
reboot

title [X]    关闭计算机
halt

在U在外部U盘中的MENU.LST如下:(注意红色部分)
timeout 30
default 2

title                                   U盘维护系统
clear

title ---------------------------------------------------------------
clear

title [01] 启动DM10分区工具
map /boot/imgs/DM10.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title [02] 启动清除COMS密码工具
map /boot/imgs/CMOS.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title [03] 启动内置菜单
errorcheck off
configfile (md)4+1
errorcheck on
commandline

title ---------------------------------------------------------------
root

title [04] 启动本机Windows NT/2K/XP/2003系统
fallback 7
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr

title [05] 启动本机VISTA/2008/Windows7系统
fallback 8
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /bootmgr

title [06] 启动本机Windows 9x/Me系统
fallback 6
find --set-root /io.sys
chainloader /io.sys

title ---------------------------------------------------------------
root

title [07] 从硬盘引导系统
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0)+1
title [08] 从光驱引导系统
cdrom --init || cdrom --stop
map --rehook
geometry (hd999) || pause --wait=0
root (cd0)    || pause --wait=5 Not found CDROM! 找不到光驱!
chainloader (cd0) && boot
chainloader (cd1) && boot
chainloader (cd2) && boot
chainloader (cd3) && boot
chainloader (cd4) && boot
chainloader (cd5) && boot
chainloader (cd6) && boot
chainloader (cd7) && boot
chainloader (cd8) && boot
chainloader (cd9) && boot

title [R]    重启计算机
reboot

title [X]    关闭计算机
halt
调用内部菜单的方法在论坛中找到的。好像官方说明没有说明有此法。
问题:调用外部的MENU.LST正常,但外部的MENU.LST调用内部的菜单无法显示“title [04] 启动本机Windows NT/2K/XP/2003系统”选项及以下的选项。不知是我调用写法不行,还是GRUB4DOS本身功能上支持不完善,如果是这样,希望能够完善。
 
试用
configfile (md)4+2成功
 
 
这个(md)4+8中的4和8分别是什么意思啊?
用cat --hex (md)4+1
 cat --hex (md)4+2
 ……
 查看一下,就应该大概明白了。
 
在grub4中,通常是通过使用文件系统中的文件名来表示文件,比如ntldr ,io.sys等。
不过,对于文件的表示方法,还有另一种重要的等价的表示方法,即块清单(blocklist)表达法 ,简单说就是根据文件在设备上存储的扇区序列来表示文件,常用的例如有 (hd0,0)+1 ,(md)4+8 等等。

grub4有个命令 blocklist ,可以较方便的列出文件的块列表。例如执行 blocklist    /ntldr 看看。(注,该命令对空字节文件暂时无效)

以 (md)4+8 为例来说,它表示了(md) 设备上,跳过4个扇区(即从第5个扇区起始的),且,连续8个扇区大的扇区块所组成的文件。
显然,其中(md)代表了文件所在的设备为grub4dos全内存设备(md),4 代表了文件在此设备上的起始扇区位置(起始扇区都从零计数,取零时可省略,如(hd0,0)+1     ),而 8    则代表此文件为8个扇区大。

由于grub4dos的内置菜单固定大小为4 K (即相当于8 个扇区大)。在启动后,又会被固定加载于内存物理地址 0x800    处。0x800 转换为十进制是2048(相当于4个扇区)。
因此,(md)4+8通常就表示了加载到内存0x800处的4k大的内置菜单文件。
(默认内置菜单的数据是小于512字节的,因此对于默认内置菜单,逻辑上一般情况下(md)4+1也可引用它)

扇区序列表达法(或叫块清单表达法)对于灵活表示,引用文件相当有用。特别是对那些位于文件系统外的扇区,而又要将它看做文件使用时,比如(hd0)1+1等。

以上的例子都是文件存储时扇区连续的情况,实际块列表表达法也可以表示不连续存放的文件。例如,(hd0,0)2+20,33+5,87+300    。可以看出,实际只是将不连续的块用逗号隔开,数值的意义和前面说的是相同的,即分别标示了各块的起始扇区和大小。

(关于文件表达法的一些高级部分,可以参见不点大人的这个贴 http://bbs.znpc.net/viewthread.php?tid=4532  ,注:未公开特性并非在每个命令下都适用,使用时请自行验证)

--------------------
注意两个 +1 特例:
以下,形式是块清单表达法,但实际意义却是特殊定义的:
1.在 map 命令中,例如map --mem (hd0,0)+1 (fd0) ; 这时(即map命令中使用+1 时),其中的(hd0,0)+1 是表示第一硬盘的整个第一分区,而不只是第一分区的第一个扇区。
2. (rd)+1 ,在任何时候也是表示包含内存设备(rd) 的全部内容,而不只是(rd)设备的第一个扇区。
grldr是一个开源的多操作系统启动加载程序,通常被用于在计算机启动时选择不同的操作系统进行启动。grldr可以通过创建不同的菜单来实现操作系统的选择。 grldr的二级菜单实例可以通过以下步骤完成: 1. 首先,需要在计算机的硬盘上创建一个名为menu.lst的文本文件。这个文件将被grldr用来读取菜单的内容。 2. 在menu.lst文件中,可以使用编辑器编写菜单的内容。每个菜单的条目包括了操作系统的名称和对应的启动命令。 3. 例如,如果计算机上有两个操作系统,Windows和Linux,可以创建两个菜单条目。第一个条目可以写作"Windows",并添加一个启动命令,使得grldr能够加载Windows操作系统。第二个条目可以写作"Linux",并添加一个启动命令来加载Linux操作系统。 4. 在菜单条目之间使用分隔符,可以增加菜单的可读性。分隔符可以是一行虚线或其他符号。 5. 保存menu.lst文件,并将其放置在与grldr文件相同的目录中。 6. 当计算机启动时,grldr会读取menu.lst文件,并在启动菜单中显示所有定义的菜单条目。 7. 用户可以使用键盘的上下键来选择要启动的操作系统,然后按下回车键确认选择。 通过上述步骤的操作,就可以实现grldr的二级菜单。用户可以方便地选择不同的操作系统进行启动,并且菜单的内容可以根据需要进行更改和更新。这使得grldr成为了一个灵活和方便的多操作系统启动加载程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值