修改initrd.gz的方法

取自:http://blog.csdn.net/youyoulg/article/details/6889101

打开终端,进入initrd.gz所在目录,先解压initrd.gz:

#gunzip initrd.gz 

在当前目录下建立一临时目录tmp:

#mkdir tmp
#cd tmp

下面把上级目录内解包的initrd进一步用cpio解包:

#cpio -i -F ../initrd

对目录内解包的initrd导一个它的目录及文件清单列表以便反向封包时用:
#cpio -i -t -F ../initrd > list

有新加或删除文件或目录,打开list进行编辑就是了,一行一个文件或目录,然后用list文件来指示cpio进行封包。

反向封包用下面的命令(还是在../tmp目录里哦)
#cpio -o -H newc -O initrd < list

gzip压缩一下:
#gzip -c initrd > initrd.gz


以下摘自度娘:

最初的想法是Linus提出的: 把cache当作文件系统装载。
他在一个叫ramfs的cache实现上加了一层很薄的封装,其他内核开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到交换分区,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。initramfs就是tmpfs的一个应用。

优点:
(1)tmpfs随着其中数据的增减自动增减容量.
(2)在tmpfs和page cache/dentry cache之间没有重复数据.
(3)tmpfs重复利用了Linux caching的代码, 因此几乎没有增加内核尺寸, 而caching的代码已经经过良好测试, 所以tmpfs的代码质量也有保证.
(4)不需要额外的文件系统驱动.

另外, initrd机制被设计为旧的"root="机制的前端,而非其替代物,它假设真正的根设备是一个块设备, 而且也假设了自己不是真正的根设备。
最后/linuxrc不是以PID=1执行的, 因为1这个进程ID是给/sbin/init保留的。
 initrd机制找到真正的根设备后将其设备号写入/proc/sys/kernel/real-root-dev, 然后控制转移到内核由其装载根文件系统并启动/sbin/init。
initramfs则去掉了上述假设, 而且/init以PID=1执行, 由init装载根文件系统并用exec转到真正的/sbin/init, 这样也导致一个更为干净漂亮的设计

生成initramfs镜像命令

若镜像根目录为/initrd,执行下面命令在当前用户主文件夹中生成myinitramfs.gz镜像。
cd /initrd
find .|cpio -o -H newc|gzip>~/myinitramfs.gz
生成的镜像文件是gzip压缩过的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值