西西河

主题:【原创】如何解开Ubuntu的initrd.img和Gentoo的initramfs -- wsxx

共:💬13 🌺37 新:
全看分页树展 · 主题
家园 【原创】如何解开Ubuntu的initrd.img和Gentoo的initramfs

你为什么要这么干?因为想DIY自己的Linux的启动过程。

对于我来说,我最近的目的是把Gentoo安装到移动硬盘上,让电脑直接从移动硬盘启动。做成这样的一个Linux之后,我可以拿着硬盘到不同的机器上使用,甚至在不支持USB启动的老机器上使用(当然它得有USB接口)。

如何在移动硬盘上安装我的Gentoo,参见

链接出处

在内核启动之后的几秒钟之内,USB设备可能尚未被系统确认,Linux可能会提示找不到根。我们需要修改启动过程,让内核sleep几秒钟之后再继续引导,就需要修改initrd(Ubuntu是initrd.img-xxxx,Gentoo是initramfs-genkernel-xxxxx)文件中的一个叫做init的脚本(script),在其中适当的地方插入一个sleep 5让它暂停5秒钟。

要编辑init这个文件,需要把压缩的initrd解开,找到其中的init进行修改,然后再把修改好的文件连同一起解开的宋有文件再打包成initrd,更换掉原来的initrd或者使用新的文件名,在启动菜单中增加新的指向。后者是保险的方法,免得万一没搞好,原来的又没了。

现在的问题是initrd文件如何解开。

我看了不少网上的文章,介绍的基本上都是针对Linux 2.4之前的方法,那时的打包方法是把所有文件做成镜像文件,再用gzip压缩。打开那种initrd文件的过程就是先gunzip,把解压的文件挂载到一个目录中,就可以对目录中的任何文件进行阅读和修改了。

但是,我开始学Linux的时候已经是2.6版推出之后了。使用上面的方法完全无法解开initrd文件,第一步gunzip可以,后面的挂载就怎么弄都是错的,修改其中的文件也就无从谈起。

这种情况持续了可能有一个月,每天翻来覆去mount -o loop -t filetype都不行,在网上查来查去也还是这个办法。

昨天,在google的搜索结果的第三页之后随便按了一个很不起眼的链接,看到一篇文章竟然有解决办法。原来2.6版开始,不再用镜像的方法制作initrd了,据分析说是为了简化制作步骤。新的制作方法采用cpio的方式制作。

接下来,我将把Ubuntu和Gentoo的解压发放介绍一下,两者还有不同,这又花了我很长时间才搞个半懂。

(待续)

关键词(Tags): #Ubuntu#Gentoo#initrd#cpio元宝推荐:闲看蚂蚁上树,铁手,
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河