- 论坛徽章:
- 0
|
什么是initrd?
-------------------------------------------------
initrd = init ramdisk,是一个启动时存在于内存的文件系统。 initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的 方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的 情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他设备上。
Linux启动一定要用initrd么?
-------------------------------------------------
如果把需要的功能全都编译到内核中(非模块方式),只需要一个内核文件即可。initrd能够减小启动内核的体积并增加灵活性,如果你的内核以模块方式支 持某种文件系统(例如ext3, UFS),而启动阶段的驱动模块放在这些文件系统上,内核是无法读取文件系统的,从而只能通过initrd的虚拟文件系统来装载这些模块。这里有些人会 问: 既然内核此时不能读取文件系统,那内核的文件是怎么装入内存中的呢?答案很简单,Grub是file-system sensitive的,能够识别常见的文件系统。
如何察看initrd的内容?
-------------------------------------------------
#cd /lib/modules/`uname -r`
#mkinitrd /tmp/initrd.`uname -r`.img `uname -r`
#cd /tmp
#mv initrd.`uname –r`.img initrd.`uname –r`.img.gz(initrd使用gzip压缩,如果不改名字的话,后面无法解压缩)
#gunzip initrd.`uname -r`.img.gz
#file initrd.`uname –r`.img(不同的linux操作系统,这个文件格式有不同,在RHEL4中,这个文件是cpio的,在其他的可能是ext2的,此处使用file命令,察看格式)
如果是cpio:
#mkdir /mnt/tmp
#cd /mnt/tmp
#cpio -idmv /boot/initrd2.img
或者:
#cd /mnt/tmp
#vi init加上一行 insmod /lib/aic7xxx.o
#cp /lib/modules/`uname -r`/scsi/aic7xxx.o lib/
#cd /mnt/tmp
#find –print |cpio –ov>/tmp/initrd2.img (find的时候最好不要用绝对路径,否则cpio出来的文件以后解压缩也会解到这个绝对路径上面)
#gzip /tmp/initrd2.img
#mv /tmp/initrd2.img.gz /boot/initrd2.img
至此,新的initrd文件initrd2.img中就包含了aic7xxx的驱动程序了
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63432/showart_520036.html |
|