分类: LINUX
2009-06-26 00:42:57
========initramfs和initrd的区别=================
boot loader装入kernel, 然后kernel需要执行/sbin/init, 读取
这个文件就必须先mount根文件系统, 早期是通过启动时的root=
参数告诉内核根文件系统在哪个设备上, 随着硬件和技术的发展,
现在根文件系统可能位于一个网络存储如NFS上, 可能由于RAID而
散布于多个设备上, 可能位于一个加密设备上需要提供用户名和密码,
这时root=参数就显得不够了. 为了应付这种局面, 先后出现两种
机制来作为boot loader装载kernel到真正的/sbin/init执行这个启动
过程的桥梁: initrd和initramfs, 两者有类似的地方, 比如都是
由内核执行其上的某个程序(initrd是/linuxrc, initramfs是/init),
由这个程序决定加载什么驱动以及如何装载根文件系统. 下面一点
笔记总结initrd的缺点和initramfs的优点.
===============make initramfs =============
(1) 黃敬群先生的blog:深入理解 Linux 2.6 的 initramfs 機制
http://blog.linux.org.tw/~jserv/archives/001954.html
(2) initramfs, a new model for initial RAM
http://www.linuxdevices.com/articles/AT4017834659.html
下面是一些使用initramfs的简单帮助
1. 查看initramfs的内容
# mkdir temp ; cd temp2. 创建initramfs
命令:mkinitramfs, update-initramfs
1) mkinitramfs
# mkinitramfs -o /boot/initrd.img 2.6.24-16
Note: 2.6.24-16是需要创建initramfs的kernel版本号,如果是给当前kernel制作initramfs,可以用uname -r查看当前的版本号。提供kernel版本号的主要目的是为了在initramfs中添加指定kernel的驱动模块。mkinitramfs会把/lib/modules/${kernel_version}/ 目录下的一些启动会用到的模块添加到initramfs中。
2)update-initramfs
更新当前kernel的initramfs
# update-initramfs -u
在添加模块时,initramfs tools只会添加一些必要模块,用户可以通过在/etc/initramfs-tools/modules文件中加入模块名称来指定必须添加的模块。