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

initrd.img是一个包含最小Linux系统的映像,用于启动时挂载根文件系统,解决内核无法直接挂载如ext3等模块的情况。vmlinuz是内核本身。initrd提供启动灵活性,例如在没有ext3支持的内核挂载ext3根分区,或从USB启动。mkinitrd命令用于创建initrd映像文件,以适应内核更新和添加驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译安装完内核后在/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值