今天学习了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上用不了 应该是压缩后丢失了一些信息 所以得用上面的压缩命令。
阅读(986) | 评论(0) | 转发(0) |