昨天上了第一节嵌入式的课程,吐槽一下老师。。。上课之前老师再看韩剧,上课的时候很随意,看着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第一种写法总结和实践
用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);
查看内核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
开始写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
以上有些数字要根据你的实际情况更改.
以上这个方法也可以用于测试新编译的内核.