Chinaunix首页 | 论坛 | 博客
  • 博客访问: 234256
  • 博文数量: 69
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 570
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-13 16:57
文章分类

全部博文(69)

文章存档

2011年(1)

2010年(5)

2009年(63)

我的朋友

分类: LINUX

2009-04-21 16:08:26

今天学习了initrd.img 的制作
系统:ubuntu 8.10  32位  内核版本 2.6.27-14-generic


initrd.img就是一个小的系统  在引导内核的时候在内存中解压,进行模块的装载。
其中装载什么模块可以自己定制, 如果没有自己定制,系统会默认给你定制一个
 
我们可以到系统的/boot下看到initrd.img-2.6.27-14-generic 怎样看到它的内容是什么呢?

>sudo cp -i /boot/initrd.img-2.6.27-14-generic /tmp
>cd /tmp
>mv initrd.img-2.6.27-14-generic initrd.gz
>gzip -d initrd.gz
>cpio -idmv initrd

这样就可以解压出诸如:bin sbin init lib ……
其实就是一个小的引导用的文件系统,网上关于initrd.img的介绍很多。


我们可以根据自己的/lib/modules/2.6.27-14-generic 制作自己的initrd.img
首先学习了一个命令mkinitrd

mkinitrd安装

sudo apt-get install initrd-tools
我没有找到initrd-tools的源  装的dep包

使用:
        mkinitrd -o initrd-2.6.27.img 2.6.27-14-generic

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

经过实验  在高版本内核中 命令mkinitrd不再使适用了  要用mkinitramfs代替  其格式和mkinitrd使用格式相同

命令 :mkinitramfs -o initrd-2.6.27.img 2.6.27-generic  
生成 initrd-2.6.27.img

特别的:
可以通过在/etc/initramfs-tools/modules文件中加入模块名称来指定必须添加的模块。
然后更新当前kernel的initramfs 命令如下:
>update-initramfs -u


cpio 压缩成(SVR4 with no CRC)格式命令:
find . | cpio -H newc -o >../initrd.img

用find . | cpio -c -o >../initrd.img压缩出来的是(pre-SVR4 or odc)格式,在我的ubuntu8.10上用不了  应该是压缩后丢失了一些信息  所以得用上面的压缩命令。
阅读(938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~