首页»版块 兴趣街区 爱数码 自制recovery简易教程

自制recovery简易教程

  [复制帖子标题和链接]

1.7万15

荣耀粉丝6354732  LV9  发表于 2015-6-12 10:24:08 属地未知 来自:浏览器

      此为本人在网络上找的很多资料里整理而成,本人未按照这个教程制作过任何recovery,如果有任何后果本人概不负责!




         大家都知道电脑用winPE做系统的ghost备份吧?启动另外一个小的系统,然后把电脑上的系统备份下来,当出了问题的时候再ghost回去。我们手机上的recovery其实就相当于这个小系统。


~~~~        自制recovery     ~~~


###背景知识####


boot和recovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用 gzip压缩过的内核,再后面是一个ramdisk内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。boot是正常引导手机系统的,recovery是在boot的基础上增加了一些功能。他们的img结构如下:

        ** +-----------------+  

        ** | boot header | 1 page  

        ** +-----------------+  

        ** | kernel | n pages  

        ** +-----------------+  

        ** | ramdisk | m pages

        ** +-----------------+  

        ** | second stage | o pages

        ** +-----------------+  

        **

其中ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件。

如果你您很擅长使用16进制编辑器的话,你您可以打开boot.img或者recovery.img,然后跳过开始的2K的头数据,然后寻找一大堆0的数 据,在这一堆0的数据后面,紧跟着1F 8B这两个数字(1F 8B是gzip格式的文件的结束标记)。从此文件开始的地方(跳过2K的头),一大堆0后面紧跟着到1F 8B这两个数字为止的全部数据,就是gzip压缩过的linux内核。从1F 8B后面紧跟着的数据一直到文件的结尾包含的全部数据,就是ramdisk内存盘的数据。你可以把把内核和ramdisk两个文件分别保存下来,在进行 分别的修改和处理。



###自制recovery的方法####

游客,如果您要查看本帖隐藏内容请评论


使用mkbootimg来重新创建recovery-new.img:

% mkbootimg --cmdline ´no_console_suspend=1 console=null´ --kernel recovery.img-kernel --ramdisk ramdisk-new.gz -o recovery-new.img



到此我们就得到了一个新的recovery-new.img,然后我们按照上面讲的刷入第三方recovery的方法刷入就可以验证刚做的recovery了







                                                                          ###自制recovery####


接着开始自制recovery吧,下面步骤:

1。从官方包,解压出原生的recovery.img。

2。按照上面解img的方法,解出原生recovery包的内核recovery.img-kernel和ramdisk内存镜像,再把ramdisk内存镜像解包,我们要在这个基础上作修改。

3。找到合适的功能比较好的第三方recovery包,比如以A3000的recovery-clockwork-5.0.2.0.img为例,同样解出其内核kernel和ramdisk内存镜像,再把ramdisk内存镜像解包,我们需要这个包内的有用文件。

4。准备新recovery的内核,我们使用官方原生包的recovery.img-kernel,只有原生的内核才能跟手机的硬件匹配。

5。修改ramdisk内存盘,其内文件列表大致如下:

./init.trout.rc

./default.prop

./proc

./dev

./init.rc

./init

./sys

./etc

./init.goldfish.rc

./sbin

./system

./data

1)default.prop,是一定要改的,可以参照第三方的改,




最关键的:

        r o.secure=0 关闭保护

ro.allow.mock.location=1 ro.debuggable=1 调试模式开

         persist.service.adb.enable=1 adb远程开

2)/sbin里面所有的文件都替换成第三方包里面的,特别是其中有个recovery文件,所有的第三方功能都在这个recovery中实现。

3)/etc里的recovery.fstab,是挂载表,可以提供sd卡ext分区支持。

4)/init可以用原生的,第三方的也行。

6。按照上面打包ramdisk的方法打包新改的ramdisk内存盘。

7。按照上面打包img的方法打包生成新的recovery-new.img。

正常情况下,到这一步我们自制的recovery.img就做好了,可是按上面刷recovery的方法刷入手机了,可是手机依然是S-ON。这就意味着Hboot会对recovery进行校验,如果校验不对,那么对不起,你别想启动手机。最终我发现了HTC  S-ON验证的秘密: 还记得上面说img的2K的文件头么?秘密就在这里,可惜不能直接贴图,具体操作如下:

8。用UltraEdit-32(或者其他16进制编辑器)打开刚改好生成的recovery-new.img,记住第二行的前三个字节(10h的0、1、2三个),一会儿有用。

9。再打开手机原生的recovery.img。对比来两个文件的文件头,把原生的前16行(000h-100h)复制到新的recovery上覆盖。这个就是S-on校验的内容,直接生成的img启动不了就是因为这里通不过校验。

10。最后把新的recovery-new.img,第二行的前三个字节改回到刚才记下的三个值,保存就OK了。这一步很关键,我一直是在此处徘徊的,最初我只保留前两个字节,造成只要对原生img一改动得稍大一点就启动不了。总之这里的三个值很关键,好像跟img的大小有关系,如果不对的话新的recovery绝对启动不了。


                                                               ###刷入自制的recovery####

游客,如果您要查看本帖隐藏内容请评论




本人更多帖子

手机常见问题解决方案

1、不用求人,这些常见故障你也能处理

2、手机OTG到底有啥用?

3、别等手机发热烫爆了 教你一键给手机降温

4、窄边框手机是个“圈套” 大家要小心

5、被这些手机常识骗了这么多年

6、你有没有遇到过手机提示“SD卡已损坏,可能需要重新格式化卡”的问题?

7、手机常见的问题解决方案

8、手机进水后的处理方法

9、刷机的种类以及刷机的过程和注意事项

10、应用程序停止运行的几种原因

11、再也不吃内存?Android 6.0将引入墓碑机制

12、7个使用手机的误区,我就不信你都知道

13、几招让你家的WIFI速度飞起来

14、喜欢彩色字体的有福了

15、主题美化之开关栏美化



更多玩机攻略点击玩机攻略

评论15
荣耀粉丝6354732  LV9  发表于 2015-6-12 10:23 属地未知 来自:浏览器
沙发自己来做。
   发表于 2015-6-12 12:59 属地未知 来自:浏览器
谢谢楼主分享
   发表于 2015-6-13 09:37 属地未知 来自:浏览器
俺想弄个包玩玩
荣耀粉丝836918  LV9  发表于 2015-6-14 21:15 属地未知 来自:浏览器
thank you very  much
荣耀粉丝11881077  LV7  发表于 2015-6-15 07:54 属地未知 来自:浏览器
看看啊陀飞轮来咯好
看天客 版主  发表于 2015-6-15 09:36 属地未知 来自:浏览器
学习一下,以后自己做
   发表于 2016-2-17 22:52 属地未知 来自:浏览器
感谢分享,楼主辛苦了,技术贴!支持的说。
荣耀粉丝12950879  LV8  发表于 2016-2-28 10:34 属地未知 来自:浏览器
详详细细
荣耀粉丝12950879  LV8  发表于 2016-2-28 10:34 属地未知 来自:浏览器
详详细细
您需要登录后才可以评论 登录 | 立即注册
简体中文 - China
快速回复 返回顶部 返回列表