剑网三万花赵小凯:GRUB4DOS的menu.lst

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 14:24:44

GRUB4DOS的menu.lst

2009-03-01 21:47 GRUB4DOS的用法和GRUB Legacy基本上一样的。除非特别说明,以下的用法也适用于GRUB Legacy。

配置文件menu.lst的基本结构GRUB4DOS的配置文件和GRUB一样,都是menu.lst。以下是一个例子:

default 0 title Boot First Partition root (hd0,0) chainloader +1
title Boot Second Partition root (hd0,1) chainloader +1

菜单项是由title来指定,该例子中有两个title,就是说GRUB4DOS器启动时会显示两个菜单项,菜单的标题是title的参数,也就是 Boot First Partition 和 Boot Second Partition。在第一个title前的命令是全局命令,它们在显示菜单之前执行。
menu.lst一般放在和启动文件GRLDR同样的目录里。
高亮的菜单项是当前选择的菜单,用上下方向键可以在不同菜单中切换。如果按下回车键,便会以当前菜单中的命令来启动系统。
在菜单界面按下c键,会进入命令行界面。
在命令行界面下,你可以手动输入各个命令。在命令行界面下,按键便可以回到菜单界面。
基本命令
以下是一些最为常用的命令
help用来显示其它命令的用法,例子:
help root
default指定缺省的菜单项,由0开始算起,例子:
default 0
该命令必须在第一个title之前指定
timeout缺省的等待时间,如果在指定的时间(以秒为单位)不按任何键,则会启动缺省的菜单项,例子:
timeout 10
该命令必须在第一个title之前指定
root用来指定根设备,例子:

root (hd0,0)
rootnoverify该命令也可以用来指定根设备。root在设置根设备前,先测试一下该分区的文件系统是否可以识别,而rootnoverify则省略这一测试。

rootnoverify (hd0,0)
chainloader把启动扇区的内容装入内存,参数+1指的是把分区的第一个扇区,例子:

chainloader +1

boot启动操作系统。在使用该命令前,必须用kernel或者chainloader把系统内核或者启动扇区/启动文件装入内存。例子:

boot


设备名字
在GRUB中,硬盘设备用以下的方法来命名:
(hdm)
m是硬盘的序号。序号0相对于BIOS的第一只硬盘。
硬盘上的分区用以下的方法来命名:
(hdm,n)
n是硬盘m里分区的序号。主分区最多有4个,其序号为0-3,扩展分区的序号从4开始。例子:
硬盘0上的第一个主分区:(hd0,0)
硬盘1上的第一个扩展分区: (hd1,4)
设备也可以用相应的BIOS设备号来表示。例如,第一只硬盘设备的设备号是0x80,因此,以下的表示是等价的: (hd0,0), (0x80,0), (128,0)
另外,对于一些文件系统来说,例如FreeBSD中使用的ffs,或者是Solaris中使用的ufs,在分区中还继续划分为子分区。子分区的表示是在分区表示的基础上加上从a开始计算的子分区序号。例如:
硬盘0上的第一个主分区里的第一个子分区:(hd0,0,a)
软盘设备用以下的方法来命名:
(fdm)
m是软盘的序号。序号0相对于BIOS的第一只软盘。
软盘设备后面同样可以加上分区或者子分区的序号。
GRUB还有其它一些设备,比如说(cd)是光盘设备,(nd)是网络设备,等等。不过它们在特定的情形下才可以使用。

文件名字GRUB的文件名字是在设备名字的基础上加上文件的路径,例子: 硬盘0上第一个主分区根目录里的aa.img文件:

(hd0,0)/aa.img
软盘0上boot目录里的aa.img文件:

(fd0)/boot/aa.img
注意:目录的分隔符是 / ,而不是Windows/DOS下常用的 \ 。
另外,你还可以用扇区的位移和数量来指定数据,比如:
(hd0,0)0+100,200+1,300+300
表示硬盘0上第一个主分区里,从扇区0起的100个扇区,然后是从扇区200起的1个扇区,最后是从扇区300起的300个扇区。当位移为零时,可以省略不写,因此,
(hd0,0)+1
表示的是硬盘0上第一个主分区里从扇区0起的1个扇区,也就是分区的第一个扇区。
GRUB中纪录了一个根设备,它由root命令来指定,例如:
root (hd0,0)
根设备上的文件可以省略设备名,例如,使用了以上的root命令后,文件名 +1 就等同于 (hd0,0)+1。
注意:在GRUB4DOS的扩展中,map命令中使用的文件名的意义和以上所说的有所不同。在map命令里,(hd0,0)+1表示的不是硬盘0上第一个主分区的第一个扇区,而是整个分区。
启动操作系统
启动一般系统一般来说,操作系统会在其所在分区的第一个扇区里放入启动代码。因此,用以下的一组命令一般可以启动硬盘0第一主分区上的操作系统:
rootnoverify (hd0,0)
chainloader +1 boot
对于不同的分区,只要修改设备名(hd0,0)就可以了。
注意:大部分的操作系统需要在第一只硬盘的主分区里才能正常启动。
注意:当把该组命令作为menu.lst里某一菜单项的内容时,最后的命令boot可以省略。
注意:该方法是通用的,它可以用来启动以下提到的系统,只要分区的第一个扇区中存在启动代码。

启动DOS/Windows 95/98/Me在GRUB4DOS中,chainloader命令可以装载DOS/Windows 95/98/Me中的io.sys。因此,可以使用类似于以下的一组命令来启动这些系统:
rootnoverify (hd0,0)
chainloader (hd0,0)/io.sys

boot

启动Windows NT/2000/XP/2003/Vista在GRUB4DOS中,chainloader命令也可以装载Windows NT/2000/XP/2003中的ntldr和Windows Vista中的bootmanager。因此,可以使用类似于以下的一组命令来启动这些系统:
启动Windows NT/2000/XP/2003:
rootnoverify (hd0,0)

chainloader (hd0,0)/ntldr

boot
启动Windows Vista:
rootnoverify (hd0,0)
chainloader (hd0,0)/bootmanager

boot
启动Linux可以用kernel指令装载Linux内核:
rootnoverify (hd0,0)

kernel (hd0,0)/vmlinuz

boot
在内核(hd0,0)/vmlinuz后可以加上启动的参数。
当启动Linux内核时,可以使initrd指令来装载初始的内存盘。
rootnoverify (hd0,0)

kernel (hd0,0)/vmlinuz

initrd (hd0,0)/initrd

boot
注意:chainloader用于装载启动扇区和特定的启动文件如io.sys和ntldr,而kernel用于装载Linux内核和符合其标准的启动文件。在一组启动命令中,两者不能同时使用。
修改界面的颜色
GRUB界面的颜色可以用color指令来指定。color中指定了两组颜色,第一组是正常文本的颜色,第二组是加亮文本(当前选择的菜单项)的颜 色。对应于每组颜色,又需要指定两种颜色。第一种是前景的颜色,第二种是背景的颜色。因此,在color总共需要指定四种颜色,分别是,正常文本前景,正 常文本背景,加亮文本前景和加亮文本背景。
颜色代码:
black (黑色) red (红色) green (绿色) brown (棕色) blue (蓝色) magenta (紫色) cyan (青色) light-gray (灰色)
dark-gray (暗灰) light-red (亮红) light-green (亮绿) yellow (黄色) light-blue (亮蓝) light-magenta (亮紫) light-cyan (亮青) white (白色)
前景色可以使用全部16种颜色,而背景色只能使用前面8种颜色。
例子:
color cyan/blue white/magenta

正常文本前景: cyan (青色) 正常文本背景: blue (蓝色) 加亮文本前景: white (白色) 加亮文本背景: magenta (紫色)

color命令一般是作为全局命令,在第一个title前使用。

使用背景图片可以用splashimage命令来加载背景图片: spashimage (hd0,0)/spash.gz
图片必须是640x480,14色的XPM格式,可以用gzip来进行压缩。
使用了该命令后,GRUB启动时将进入图形模式。这时,color命令指定的文本颜色将会无效。图形模式下颜色的设置应该使用foreground命令:
foreground ffff00
以上命令设置字体的颜色。颜色用RGB值来表示,ffff00是黄色。
如果没有使用foreground命令,缺省的文本颜色是白色

常用颜色的RGB值对应表:
000000c0c0c0800000ff00000000800000ff800080ff00ff00800000ff00808000ffff0000808000ffff808080ffffff
splashimage和foreground命令一般在第一个title前使用
使用中文界面首先,你必须使用支持中文的版本。并且,要正常显示中文的菜单,你需要使用fontfile命令来装载中文字体: fontfile (hd0,0)/fonts.gz
fonts.gz是字体文件,并且使用了gzip来压缩。例子中使用的fonts.gz可以在这里下载。
fontfile命令可以和splashimage,foreground一起使用。例如:
splashimage (hd0,0)/splash.gz

foreground ffff00

fontfile (hd0,0)/fonts.gz
title 启动第一个分区
root (hd0,0)

chainloader +1
title 启动第二个分区
root (hd0,1)

chainloader +1




MBR主引导记录执行流程分析

MBR( Master Boot Record )主引导记录包含两部分的内容,前446字节为启动代码及数据,而
; 从446(0x1BE)开始则是分区表,分区表由四个分区项组成,每个分区项数据为16字节,记录了
; 启动时需要的分区参数。
;
; 在CPU上电之后,若由硬盘启动,则BIOS将硬盘的主引导记录(位于0柱面、0磁道、1扇区)读
; 入7C00处,然后将控制权交给主引导代码。主引导代码的任务包括:
; (1) 扫描分区表,找到一个激活(可引导)分区;
; (2) 找到激活分区的起始扇区;
; (3) 将激活分区的引导扇区装载到内存7C00处;
; (4) 将控制权交给引导扇区代码;
;  
; 如果主引导代码无法完成上述任务,它将显示以下错误信息之一:
; No active partition.
; Invalid partition table.
; Error loading operating system.
; Missing operating system.

;机器加电或按reset键后都要进行系统复位,复位后CS=FFFFH,IP=0000H
;那么自然就从FFFF:0000H处开始执行指令,这个地方只有一条JMP指令
;跳转到系统自检程序处,系统自检完成后把软盘的第一个扇区(如果由软盘启动)
;或者硬盘的第一个扇区,即MBR扇区(如果由硬盘启动)读入到0:7C00H处
;然后把控制权交出,从0:7C00H处继续执行,下面就是硬盘的MBR代码分析
;其中的引导扇区是指硬盘相应分区的第一个扇区,是和操作系统有关的
;操作系统的引导是由它来完成的,而MBR并不负责,MBR和操作系统无关
;他的任务是把控制权转交给操作系统的引导程序

程序流程:
1 将程序代码由0:7C00H移动到0:0600H(注,BIOS把MBR放在0:7C00H处)
2 搜索可引导分区,即80H标志
成功:goto 3
失败:跳入ROM BASIC
无效分区表:goto 5
3 读引导扇区
失败:goto 5
成功:goto 4
4 验证引导扇区最后是否为55AAH
失败:goto 5
成功:goto 6
5 打印错误进入无穷循环
6 跳到0:7C00H进行下一步启动工作