曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4716|回复: 0
打印 上一主题 下一主题

initrd 解析

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2010-11-7 23:53:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
initrd 全称是 initial ramdisk,它的作用相当于内核到文件系统之间的一个桥梁,如下图所示:

如上图,在 GRUB 加载内核时,内核会在内存中创建一个 rootfs,接着内核将 initrd mount 到 rootfs 上。 接着,系统按照 initrd 中的脚本依次加载各驱动程序,最后进入实际的文件系统。

一般的,在 /boot 中能够找到 initrd ,如:
$ ls /boot/
config-2.6.26-2-686 initrd.img-2.6.26-2-686 System.map-2.6.26-2-686
grub vmlinuz-2.6.26-2-686
用 file 命令看一下 initrd 文件的类型:

$ file /boot/initrd.img-2.6.26-2-686
/boot/initrd.img-2.6.26-2-686: gzip compressed data, from Unix, last modified: Sun Oct 31 16:19:26 2010
由此可见,initrd 原来是个 gzip 压缩文件。现在拷贝一份 initrd 到另外的目录,然后将其后缀名改为 gzip :

$ mv initrd.img-2.6.26-2-686 initrd.img-2.6.26-2-686.gz
接着,解压缩它:

$ gunzip initrd.img-2.6.26-2-686.gz
$ ls
initrd.img-2.6.26-2-686
再用 file 查看一下解压缩后的文件属性:

$ file initrd.img-2.6.26-2-686
initrd.img-2.6.26-2-686: ASCII cpio archive (SVR4 with no CRC)
现在文件是 cpio 格式了。cpio 是一种备份格式。那现在就用 cpio 命令将文件还原:
[email=beyes@debian:~/initrd$]beyes@debian:~/initrd$[/email] cpio -id < initrd.img-2.6.26-2-686
29214 blocks
[email=beyes@debian:~/initrd$]beyes@debian:~/initrd$[/email] ls
bin  conf  etc  init  initrd.img-2.6.26-2-686  lib  sbin  scripts
上面除了 initrd.img-2.6.26-2-686 外,都是还原出来的文件。另外,在 cpio 命令中,i 选项表示“解压缩”,d 选项表示“在需要时自动建立第一层目录”。
initrd 文件被还原后,根据发行版的不同,还原出来的目录结构和文件会有些许的不一样。但是里面一定会包含着许多的驱动模块,比如在 Debian 里会看到:
$ ls lib/modules/2.6.26-2-686/kernel/drivers/
acpi  block  ide       message  net      scsi     usb
ata   cdrom  ieee1394  misc     parport  ssb      video
base  hid    input     mmc      pcmcia   thermal  virtio
从上面的输出看到,探寻 lib 目录下的 drivers 目录,会发现底下有许多驱动程序目录,各个目录下所存放的模块都是开机时必须加载的模块。之所以把开机的模块放在 initrd 里,而不是直接在 kernel 里,那是因为设备是会越来越多的,相应的驱动也会越来越多,如果都将这些驱动都放在内核里,那就造成内核越来越大,那显然不是个法子。

如果在启动后系统找不到 initrd ,那么会导致 kernel panic 无法启动系统,原因可能是因为系统无法找到你的硬盘驱动程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 19:15 , Processed in 0.075437 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表