Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381408
  • 博文数量: 73
  • 博客积分: 3574
  • 博客等级: 中校
  • 技术积分: 1503
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-26 11:17
文章分类

全部博文(73)

文章存档

2012年(14)

2011年(15)

2010年(44)

分类: LINUX

2010-07-28 14:38:55

initrd***.img是一个镜像文件,类似ramdisk,把一段程序打包到img里,然后在开机的时候在内存里开辟一段区域,一般是2m,释放到那里运行,都是一些初始化的程序,比如sisc_mod、ext3、sd_mod等模块和insmod、nash等命令。不同内核,初始化的img可 以相同,也可以不同,如果没有,可以在grub.conf里加上no initrd,它就跳过initrd的检测和执行了。 它的作用是在没有mount /分区以前,系统要执行一些操作,比如挂载scsi驱动,它就把initrd释放到内存里,作一个虚拟的/,然后执行其根目录下的一个脚 本"linuxrc",运行insmod和nash命令挂装模块。

2.4内核中boot目录下的initrd文件,实际上位一个指向ext2格式的initrd.gz文件的软连接。
下面来看看如何查看initrd***.img里面的内容和如何为你的新内核创建一个新的initrd.img文件。 查看initrd.img: initrd***.img虽然后缀是“img”,但其实它是一个gz格式的文件,我们可以先把它解压,然后载挂装到目录下:
1、cp initrd.img initrd.gz
2、gunzip initrd.gz 
3、mount -o loop initrd /mnt/initrd
进入/mnt/initrd目录,我们就可以看到initrd***.img文件的庐山真面目了。

制作initrd文件 当我们编译了一个新的内核,也不要忘了为我们的scsi设备做一个新的initrd镜像:
语法: mkinitrd 文件名 内核的目录名
示例:  mkinitrd initrd-2.4.19.img 2.4.19

2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需要使用gunzip解压缩,然后再使用cpio解包

cp /boot/initrd-***.img initrd.gz
gunzip initrd.gz
cpio -ivmd < initrd

最初通过file查看initrd.img为gzip compressed date,gunzip解压后的initrd,则为ASCii cpio

通过以上命令就将initrd.img解压了,现在就可以对其进行编辑,完成后使用以下命令重新压制

find . | cpio -ov > ../initrd.new.img
gzip ../initrd.new.img

再将其改名拷贝至/boot目录,重启就可以观察修改后的效果。重启后无法成功引导。这是因为生成的initrd.img不对。解决如下:

生成initrd
find . | cpio -o -H newc | gzip > /mnt/sda1/boot/initrd.img-2.6.18-4-686
(注:-H newc 是必须的,否则内核会认为是ramdisk,而不是initramfs)

 

PS: 内存文件系统是我下一个要搞定的问题~

阅读(1050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~