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

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

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

相关文章:

你感兴趣的文章:

标签云: