- 发帖可能变空内容,邪门暂不知所以然
- 『稷下学宫』新认证方式,24年网站打算和努力目标
主题:【原创】如何解开Ubuntu的initrd.img和Gentoo的initramfs -- wsxx
你为什么要这么干?因为想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的解压发放介绍一下,两者还有不同,这又花了我很长时间才搞个半懂。
(待续)
- 相关回复 上下关系8
🙂【原创】如何解开Ubuntu的initrd.img和Gentoo的initramfs
🙂好文,做个极好 1 小愚 字0 2006-09-01 12:01:09
🙂【后记】我们应该养成好习惯 3 wsxx 字1127 2006-08-30 10:38:49
🙂很佩服您的钻研精神 1 泰让 字3 2006-09-01 10:18:48
🙂(续二)解压Gentoo中的initramfs的方法 4 wsxx 字1853 2006-08-29 05:56:19
🙂(续三)解压Gentoo中的initramfs的详细方法 3 wsxx 字1737 2006-08-30 10:03:02
😁静心学习,花,呵呵,一花双宝,好爽! 1 住在乡下 字0 2006-08-29 20:48:55
🙂(续一)解压Ubuntu的initrd.img的方法 3 wsxx 字2675 2006-08-28 04:19:13