介绍——修改recovery.img(刷机镜像)

Recovery镜像只用于刷机,通常的镜像文件名为:receovery.img,其实制作ROM并不一定要制作Recovery镜像。因为有很多现成好用的Recovery,例如,Clockworkmod Recovery就是其咋红的佼佼者。尽管有很多Recovery可以不同,不过有时由于特殊的需要或显示自己更加geek。想定制自己的Recovery。本节将详细介绍如何定制recovery.img,不过事先说明一点,定制recovery.img的方法只是在已经有recovery镜像文件的前提下完成的。关于如何更深入定制recovery和修改recovery的源代码。

在学习定制Recovery.img之前,先清楚recovery.img到底是个什么东西。从本质上说,recovery.img和boot.img高达90%是一样的。这就意味着,recovery.img也是Linux内核(zImage)和内存磁盘镜像(ramdisk.img)组成的。这两个镜像中的Linux内核是完全一样的,区别只是ramdisk.img中的少部分文件存在差异。其中最主要的差异是recovery.img和ramdisk.img中的sbin目录中多了一个recovery命令进入Recovery主界面,而不会正常启动Android系统。实现的原理是Recovery.img和boot.img在自己的分区各自有一个Linux内核(zImage),尽管Linux内核都一样,但Linux内核调用的init命令解析的init.rc及其相关文件的内容有一定的差异。而Bootloader根据用户的选择决定使用boot.img中Linux内核,还是使用Recovery.img中的Linux内核启动系统。如果使用前者,Android系统就会正常启动,如果使用后者,就会进入Recovery选择菜单,所以recovery.img和boot.img的第二个差异就是其中的init.rc及其相关配置文件的内容略有不同。

从前面的描述还可以看出,recovery.img和boot.img其实都是一个最小的运行系统,也就是说他们都各自带一个满足最低要求的运行环境(ramdisk.img)。boot.img利用这个运行环境监理更大的运行环境(system.img) ,而recovery.img就直接使用了这个运行环境进行基本的操作(复制文件、删除文件、加压文件、mount等),这些操作也就是Recovery模式下刷机要进行的一些操作。

既然了解了recovery.img是什么东西,那么就可以解压recovery.img,并且重写生成recovery.img文件。

假设recovery.img文件在当前目录下,具体的解压和打包命令如下。

解压recovery.img

mkdir recovery

cd recovery

uppackbootimg -i ../recovery.img

执行下面的命令会在recovery目录下生成如下5个文件。

recovery.img-zImage

recovery.img-ramdisk.gz

recovery.img-cmdline

recovery.img-pagesize

recovery.img-base

其中前两个分别为recovery.img中的Linux内核和内存磁盘镜像。可以使用下面的命令解压recovery.img-ramdisk.gz文件。

解压recovery.img-ramdisk.gz文件

mkdir ramdisk

cd ramdisk

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

现在回到上一层目录,最后按着4.2.4小节的方法重新生成内存镜像文件(这里为Recovery.img-randisk.gz.new),并使用下面的命令重新生成Recovery镜像(这里为recovery.img.new )。

重新生成Recovery镜像文件

mkbootimg --kernel recovery.img-zImage --ramdisk recovery.img-ramdisk.gz.new -o recovery.img.new

现在可以使用下面的命令重新刷Recovery(加上Android 处在正常启动状态),并进入Recovery模式。

刷Recovery镜像

adb reboot bootloader

fastboot flash recovery recovery.img.new

fastboot reboot

adb reboot recovery

你可能感兴趣的:(介绍——修改recovery.img(刷机镜像))