menu.lst的写法

昨天上了第一节嵌入式的课程,吐槽一下老师。。。上课之前老师再看韩剧,上课的时候很随意,看着xx培训机构的ppt,还时不时的需要自己理解一下,再给我们读ppt,反正带着我们读了一遍,效果就是懂的人依然懂,不懂的人,听不懂。不过从中可以看出,老师对这门课的熟练程度,说明关于嵌入式的技术,她已经达到一定的境界了吧。只不过态度感觉貌似有点不认真。


menu.lst 位于/boot/grub目录中,也就是/boot/grub/menu.lst 文件;建议学会vim,用vim来编辑它。


例:

default=0
timeout=5
splashimage=(hd0,6)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,6)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
initrd /boot/initrd-2.6.11-1.1369_FC4.img title WinXp
rootnoverify (hd0,0)
chainloader +1

  • default=0
    是默认启动哪个系统,从0开始;每个操作系统的启动的定义都从title开始的,第一个title 在GRUB的启动菜单上显示为0,第二个启动为1,以此类推;

  • timeout=5
    注:表示在开机后,GRUB画面出现几秒后开始以默认启动;如果在启动时,移动上下键,则解除这一规则;
    splashimage=(hd0,6)/boot/grub/splash.xpm.gz
    注:GRUB的背景画面,这个是可选项;若不喜欢GRUB的背景画面,可以加#号注释掉,也可以删除;

  • hiddenmenu
    注:隐藏GRUB的启动菜单,这项也是可选的,也可以用#号注释掉;

  • 一般情况下对Linux操作系统的启动,包括四行;
    title 行;
    root行; /boot所在的分区
    kernel 行;指定内核及Linux的/分区所在位置
    initrd 行;内存镜像文件 .

  • title XXXXX
    title 后面加一个空格,title 是小写的,后面自己定义;比如FC4;

  • root (hd[0-n],y)
    在本例中,我们看到的是root (hd0,6) ,root (hd[0-n],y)表示的是/boot所在的分区;有时我们安装Linux的时候,大多是不设置/boot的,这时/boot和/所在的同一个分区;
    root (hd0,6)标识从第一个硬盘,第7个分区来启动搜索引导内核.
    grub的硬盘标识方法与linux的不同:
    在linux中第一个主分区为hda1,第二个主分区为hda2,第一个逻辑分区为hda5
    而在 grub中是以(hdx,y)来标识的,如第一个主分区为(hd0,0)第一个逻辑分区为(hd0,4)依此类推.
    所以grub中的root后面是你的 /boot所在分区标识.

  • 指定内核及Linux的/分区所在位置
    例:
    kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
    以kernel 起始,指定Linux的内核的文件所处的绝对路径。
    因为内核是处在/boot目录中的, 如果/boot是独立的一个分区,则需要把boot省略;因为/boot所处的分区已经在title 下一行root (hd[0-n],y)中指定了,
    所以就无需要再指明内核处在哪个分区了;
    这行要写成:
    kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ 
    如果查看系统运行所挂载的分区,请用 df -lh 来查看,就能明白/boot是不是独立的分区,或者查看/etc/fstab也可以;
    ro 表示只读;
    root=LABEL=/ 表示Linux的根所处的分区。
    LABEL=/ 这是硬盘分区格式化为相应文件系统后所加的标签;
    如果不用标签,也可以直接以
    /dev/hd[a-z]X 或者/dev/sd[a-z]X来表示;
    如: root=/dev/hda7对应root (hd0,6)

  • initrd 命令行的写法

1.如果/boot是独立一个分区,initrd 一行要把/boot省略;initrd 应该写成;
initrd  /initrd-2.6.11-1.1369_FC4.img
2.如果/boot不是独立分区,而是和Linux
的/分区处于同一分区,则不应该省略;则要写成;
initrd  /boot/initrd-2.6.11-1.1369_FC4.img

menu.lst第一种写法总结和实践

  1. 用fdisk -l ;df -lh ;more /etc/fstab来确认分区情况;
    我们通过fdisk -l ;df -lh ; more /etc/fstab 来确认/boot所在的分区,及Linux的根分区所在位置;
    比如我们确认/boot和Linux的/分区同处一个分区;
    [root@localhost ~]# df -lh
    Filesystem            容量  已用 可用 已用% 挂载点
    /dev/ hda7              11G  9.2G  1.2G  90% /
    /dev/shm              236M     0  236M   0% /dev/shm
    在/etc/fstab 中,查看/分所在的分区或分区标签是什么;
    [root@localhost ~]# more /etc/fstab
    This file is edited by fstab-sync - see ‘man fstab-sync’ for details
    LABEL=/                 /                     ext3    defaults        1 1
    /dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
    /dev/shm                /dev/shm                tmpfs   defaults        0 0
    /dev/proc               /proc                   proc    defaults        0 0
    /dev/sys                /sys                    sysfs   defaults        0 0
    LABEL=SWAP-hda1         swap                    swap    defaults        0 0
    /dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,managed 0 0

    经过上面的df -lh 和more /etc/fstab 的对照中得知,/boot并不是独处一个分区,而是和/在同一个分区;这个Linux系统安装在/dev/hda7上,文件系统(此分区)的标签为LABEL=/ ,/boot也是处于/dev/hda7 ,/dev/hda7也可以说是 root (hd0,6);

  2. 查看内核vmlinuz和initrd文件名全称
    [root@localhost ~]# ls -lh /boot/vmlinuz*

-rw-r–r–  1 root root 1.6M 2005-06-03  /boot/vmlinuz-2.6.11-1.1369_FC4
[root@localhost ~]# ls -lh /boot/initrd*
-rw-r–r–  1 root root 1.1M 11月 26 22:30 /boot/initrd-2.6.11-1.1369_FC4.img

  1. 开始写menu.lst
    我们根据上面所提到的,可以写成如下的样子;
    default=0 
    timeout=5
    title FC4
    root (hd0,6)
    kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
    (也可以写成 kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7)
    initrd /boot/initrd-2.6.11-1.1369_FC4.img

    当开机后进入grub界面但没了菜单,只剩下一个grub>提示符,怎么启动
    grub>cat (hd0,6)/boot/grub/grub.conf (为了看参数)
    grub>root (hd0,6)
    grub>kernel (hd0,6)/vmlinuz-2.4.18-14 ro root=LABEL=/
    grub>initrd (hd0,6)/initrd-2.4.18-14.img
    grub>boot
    以上有些数字要根据你的实际情况更改.
    以上这个方法也可以用于测试新编译的内核.