制作CPIO格式的INITRD

LINUX内核自从2.6版以后,就大力推荐CPIO-INITRD.

现在各大LINUX发行版的INITRD都是CPIO格式的.

这次主要说下如何制作CPIO-INITRD.

首先假设咱们已经用BUSYBOX或KLIBC或别的什么做好了根文件系统,位于~/rootfs下.

按照IBM DEVELOPERWORKS里的文章说,可以用以下命令制作CPIO-INITRD:

cd ~/rootfs
find . | cpio -c -o > ../initrd.img
gzip ../initrd.img

其实这是不对的.

我用这几条命令制作CPIO-INITRD,结果都是KERNEL PANIC.

参照我用的ARCHLINUX发行版的mkinitcpio命令的脚本代码,应该是用gen_init_cpio命令来制作CPIO-INITRD.

gen_init_cpio命令源码通常与LINUX内核源码一块儿打包,位于内核源码目录的usr/下面.

编译其源码得到gen_init_cpio可执行文件,这还不够.

gen_init_cpio的参数是一个文本文件,这个文件的内容类似于这种格式:

dir /sbin 755 0 0
slink /sbin/makedevs ../bin/busybox 777 0 0
slink /sbin/modprobe ../bin/busybox 777 0 0
slink /sbin/switch_root ../bin/busybox 777 0 0
slink /sbin/sysctl ../bin/busybox 777 0 0
slink /sbin/lsmod ../bin/busybox 777 0 0
slink /sbin/getty ../bin/busybox 777 0 0
slink /sbin/ifconfig ../bin/busybox 777 0 0
......

很明显,这是个文件列表.

手工制作这个文件列表是不现实的,usr/目录下还有个gen_initramfs_list.sh,这个脚本就是用来自动生成文件列表的.

好了,下面咱们就可以得出生成CPIO-INITRD的完整步骤了:

cd ~
gen_initramfs_list.sh rootfs/ > filelist
gen_init_cpio filelist > rootfs.cpio
gzip rootfs.cpio

最后得到的这个rootfs.cpio.gz,就是咱们要的CPIO-INITRD了.

在BOOTLOADER里修改一下参数:

append initrd=rootfs.cpio.gz ramdisk_size=8192 vga=792

结果怎么样?

(全文完)

参考链接:

Linux2.6 内核的 Initrd 机制解析
http://www.ibm.com/developerworks/cn/linux/l-k26initrd/index.html

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/6_system/linux/Linuxjs/200866/123072.html

在已经做好的 rootfs 下

代码:
find . | cpio  -H newc -o > /tmp/rootfs.cpio

cd /tmp

gzip -9  rootfs.cpio
-L 解除符号连接的关联
-H newc 是采用新型 (SVR4) 跨平台格式, 支持大于 65536 i 节点 的 文档系统,不能启动主要是这
个,因为缺省格式是老式的"bin"
经试,能成功启动,这样修改 initrd.gz 文档,比 mkinitramfs 形象、方便的多
cpio 解压
首先,该文件是一个经过压缩的文件,当然要先解压了,这些大家都非常清楚的,就是用
  #gunzip 文件名.cpio.gz
  这样文件就解压成为 "文件名.cpio" 了,然后再对它进行 cpio 操作
  #cpio -idmv < 文件名.cpio
  这样就将 cpio 文件彻底暴露在我们面前了。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yinkaizhong/archive/2008/11/19/3335504.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值