如何修改Android系统的ramdisk.img

2025年03月10日 02:13
有1个网友回答
网友(1):

Ramdisk.img就在Tools工具下。而现在,我们是针对真机提取Ramdisk,修改相关文件,再将其放回去,这样以后Android设备启动时,加载的都是已经修改过的Ramdisk镜像了。我们不会去直接用Tools目录下的Ramdisk,因为很可能你的Boot镜像是已经修改过的,你只不过想在其基础上进行进一步修改而已。 1提取 好,进入正题,本文主要以修改boot.img中的ramdisk为例,但是其他的修改原理都是相通的。 首先,我们要把boot镜像从设备中提取出来,方法就是在上一篇文章中谈到的,先去adb shell中 cat /dev/mtd/mtd2 > /sdcard/root.img 然后 adb pull /sdcard/root.img ./ 这样就把root.img拷贝到本地目录下了。好,接下来的步骤,可要看仔细了,错了一点,就完全不对路了。 我们已经介绍过,boot.img的组成结构是 +—————–+ boot header 1 page +—————–+ kernel n pages +—————–+ ramdisk m pages +—————–+ second stage o pages +—————–+ 那我们要做的就是把这几个部分分别分离出来。具体的分离原理并不是很难,就是特别麻烦。所以建议大家都用现成的脚本来做。点击unpack下载分离的脚本,点击repack下载重新打包的脚本。 好,我们现在先进行镜像分离。用命令 ./split_bootimg.pl boot.img 成功执行后,可以得到两个文件,一个是boot.img-kernel,另一个是boot.img-ramdisk.gz。我们这里以修改ramdisk为例,所以将其解包 % mkdir ramdisk % cd ramdisk % gzip -dc ../boot.img-ramdisk.gz cpio -i % cd .. 解包之前新建一个文件夹放解包出来的文件,然后进入这个文件夹执行gzip和cpio的命令。至于原理,同上,请参考两年前的这篇文章。 2 生成新img 好,接下来你就可以做你想做的任何修改了,包括init.rc之类的进程方面的修改,或者丢一个什么东西进去,或者其他。只需要确保你做的修改没有问题就行。修改完成后,自然就是要将其重新还原成img包了,这时repack脚本就派上用场。用命令 repack-bootimg.pl boot-new.img 就可以生成新的boot-new.img了。 3 刷入新img 生成了新的img后,我们如何在系统上应用我们的新boot.img呢?首先,把img文件放到sdcard上去 adb push ./boot_new.img /sdcard 然后执行这两个操作 # cat /dev/zero > /dev/mtd/mtd2 # flash_image boot /sdcard/mynewimage.img 执行第一个操作时,可能会提示你 write: No space left on device 这个信息没关系,不用管它。两个命令都执行后,最后adb shell reboot即可。如果重启顺利,那么恭喜你,你的新镜像刷成功了,此时的ramdisk自然也是新的ramdisk了。 4 刷boot镜像有问题? 其实到这里,才是俺想发挥的地方。上面介绍的所有步骤,有两个特点 4.1 国外友人上都介绍过 4.2 G1上成功率最高 所以如果你是用Magic或者Hero,有一定几率会出线重启之后,画面就停留在 HTC 或者Android那里,不会进入系统。此时你必须拿出电池重新开机,按照我这篇文章所讲的方法刷一次recovery image,才能正常进入系统。如果你真的遇到这种情况,就说明上面介绍的这个方法不适合你,那么,还有没有别的方法让系统boot我们自己的boot image呢? 当然有。在这篇文章中,我们介绍了有很多第三方ROM供我们刷机,从而达到更多功能或者获得root权限的目的。其中,我们介绍了里面有一个update.zip的东西,如果亲自刷过机的朋友就知道这是什么文件。我同时也介绍了,update.zip里面就是要添加到你的system中的各种工具,其中就包括了boot.img。也就是说,我们可以自己做一个属于自己的ROM,其中包括我们自己的boot.img。