initrd.img 和vmlinux的作用分别是什么?

编译安装完内核后在/boot下没有initrd.img

vmlinuz自然就是内核了,initrd.img是一个小的映象,包含一个最小的linux系统。通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块,然后发现真正的root分区,挂载并执行/sbin/init... ...。
initrd.img当然是可选的了,如果没有initrd.img,内核就试图直接挂载root分区。
之所以要有initrd,那是为了启动的时候有更大的灵活性。比如,你把ext3支持编译成模块了。偏偏你的root分区又是ext3的。这下就麻烦了。因为内核需要挂载root分区之后才能加载ext3支持。但是没有ext3支持就没法挂载root分区。initrd就是用来解决这个问题的。
类似的用这个东西还可以做其他的事情,比如从usb盘启动linux也会面临上面类似的问题。用initrd就能搞定了。
甚至,我想在有些嵌入式设备里面都不需要真正的root分区,用initrd就足够搞定一切了。


主要是为了解决vmlinuz太大的问题,用initrd可以解决这个问题。否则的话在2.6的内核中启动会失败的。

mkinitrd是重新封包核心的命令,例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去!
mkinitrd(make initial ramdisk images)

功能说明:建立要载入ramdisk的映像文件。

语  法:mkinitrd [-fv][--omit-scsi-modules][--version][--preload=<模块名称>][--with=<模块名称>][映像文件][Kernel 版本]

补充说明:mkinitrd可建立映像文件,以供Linux开机时载入ramdisk。

参  数:
   -f    若指定的映像问家名称与现有文件重复,则覆盖现有的文件。
 -v  执行时显示详细的信息。
   --omit-scsi-modules    不要载入SCSI模块。
   --preload=<模块名称>    指定要载入的模块。
   --with=<模块名称>    指定要载入的模块。
   --version    显示版本信息


实例:
/sbin/mkinitrd --builtin=mptscsi --preload=usbkbd --preload=usbmouse --with=qla2xxx_conf --with=qla2xxx -f /boot/initrd-2.6.16.52.2.smp.img 2.6.16.52.2.smp

猜你喜欢

转载自sinxadmin.iteye.com/blog/866407