介绍——修改ramdisk.img(内存磁盘镜像)

内存磁盘镜像存储了Linux内核启动时要装载的核心文件,通常的镜像文件名为ramdisk.img.尽管ramdisk.img需要放在Linux内核镜像(boot.img)中,但却属于Android源代码的一部分。也就是说,在编译Android 源代码后,会生成一个ramdisk.img文件,其实该文件就是root目录压缩后生成的文件。ramdisk.img文件中封装的内容是Linux内核与Android系统的第一批文件,其中有一个非常重要的init命令(在root目录中可以找到该命名文件),该命令用于读取init.rc以及相关配置文件中的初始化命令。之所以称ramdisk.img为内存磁盘镜像,是因为ramdisk.img中的文件映射的实际上都是内存中的文件,也就是说,即使有权修改init.rc等文件,也只是修改原始文件在内存中的,重新启动Android设备后,有会恢复到最初的状态。而修改这些文件的唯一方法就是重新制作ramdisk.img文件,并连同Linux内核二进制文件(ZImage)生成boot.img文件,并且在Bootloader模式刷机才可以。而ramdisk.img是boot.img中重要的组成部分之一,

ramdisk.img文件与前面介绍的system.img、userdata.img不一样,不能使用simg2img还原,并使用mount挂载。其实ramdisk.img文件只是一个普通的zip压缩文件,可以直接使用gunzip命令解压,不过解压后并不是原声文件和目录,而是有cpio命令备份的文件,所以还需要使用cpio继续还原。

假设ramdisk.img文件在当前目录下,则还原ramdisk.img文件的命令如下:

mkdir ramdisk

cp ramdisk 

gunzip -c ../ramdisk.img > ../ramdisk.cpio

cpio -i < ../ramdisk.cpio

也可以将最后两行命令合成如下的一行。

gunzip -c ../ramdisk.img | cpio -i

执行上面的命令后,就会在ramdisk目录中看到内存磁盘镜像还原后的目录结构,

如果现在要修改init.rc等配置文件,可以自己在ramdisk目录中找到相应的文件并修改。例如,有Linux的瑞士军刀之称busybox,可以放到ramdisk中的sbin目录下。这样在Recovery模式下就可以使用busybox命令完成很多操作了。

修改完ramdisk目录的内容后,就需要使用下面的命令将ramdisk目录重新生成ramdisk.img文件。为了与原来的ramdisk.img文件有所区别,这里生成了ramdisk.img.new文件,在执行下面的命令之前,要保证Linux终端的当前目录是ramdisk。

mkbootfs . | minigzip > ../ramdisk.img.new

你可能感兴趣的:(介绍——修改ramdisk.img(内存磁盘镜像))