by falcon & heihaier
2009-08-22
(07:20:11) 黑孩儿:
为什么使用pmon引导不需要initrd.img呢?
(09:51:52) falcon:
initrd.img不是必须的,可以不要的
(09:52:11) falcon:
initrd.img里头也是一个基本的文件系统,可以直接使用硬盘上的rootfs
(10:09:31) 黑孩儿:
那为什么那么多的系统用initrd呢?
(10:16:02) falcon:
呵呵,这个实际上是这样的
(10:16:25) falcon:
initrd的作用是预先加载一些驱动
(10:16:49) falcon:
这些驱动是以模块的形式编译,而不是直接编译在内核里头
(10:17:23) falcon:
例如,我们有一个ide的硬盘,如果相关驱动没有编译到内核里头,那么我们的内核将不能访问该硬盘,也就不能挂载硬盘上的文件系统
(10:17:30) falcon:
那么系统就起不了
(10:17:43) falcon:
initrd就是为了满足这种需求的
(10:18:11) falcon:
目前龙芯上把一些基本的驱动都编译进内核了,没有使用initrd,所以也能启动
(10:19:02) 黑孩儿:
哦。明白了。
(10:20:29) falcon:
在livecd里头,initrd是必须的
(10:21:02) 黑孩儿:
为什么?
(10:22:08) falcon:
这个跟可启动光盘的限制有关系了
(10:22:54) 黑孩儿:
哦。我知道了。
(10:23:12) falcon:
可启动光盘的开头一部分是可以直接访问的,这个地方的大小受限,使得内核的大小受到限制,不能把额外的各种都放进去,所以放到了initrd.img里头
(10:23:28) falcon:
各种驱动
(10:23:32) 黑孩儿:
Initrd 用于加载cd中的映像做根文件系统。
(10:24:16) falcon:
因为livecd一般都支持大量的硬件,即使能够把某一个驱动放到内核里头,其他的就访问不了了,但是放在initrd里头就比较方便了,可以按需加载
(10:25:09) falcon:
另外,initrd适合一些无盘系统,比如有些嵌入式的系统,只有一个很小的flash card,这个时候只要一个内核+一个initrd(ramdisk)就可以了。
(10:25:25) falcon:
有时候可以把内核跟initrd制作成一个img.
(10:27:02) 黑孩儿:
哦。原来是这样。
(10:28:53) falcon:
不是这种系统不能存东西,除非存放在网络上,不过这个东西很适合做一些KIOSK,内容是固定的,呵呵
(10:29:03) falcon:
系统重启后,一切恢复如初
(10:29:45) 黑孩儿:
恩。
(10:30:36) 黑孩儿:
但它启动时都要加载到内存,也不能太大。
(10:31:34) falcon:
恩
(10:41:29) falcon:
Linux下的initrd映像文件初探
http://oss.lzu.edu.cn/modules/lifetype/index.php?op=ViewArticle&articleId=260&blogId=6
(10:41:40) falcon:
很早以前写的东西
补充,龙芯上使用initrd的配置文件写法(把vmlinux和ramdisk.img放到第一个分区的根目录下即可):
timeout 5
default 0
showmenu 1
title Linux 2.6.27 with initrd
kernel /dev/fs/ext2@wd0/boot/vmlinux
initrd /dev/fs/ext2@wd0/boot/ramdisk.img
args console=tty root=/dev/ram0 no_auto_cmd