【原创】从零开始——Android 4.0 实现recovery模式,出厂设置功能
2013-08-22 11:12
1296 查看
在移植recovery之前,我们需要知道为什么需要移植recovery?
1、需要实现恢复出厂设置功能
2、需要实现recovery升级功能(主要是方便用户自己定制ROM)
在移植这个recovery的时候遇到了N多的问题,没人指导,没有可供参考的书籍,只有度娘和谷歌陪伴。下面将会提到一些典型会遇到的问题。
如何进入recovery?
1、开机的时候按下组合按键
2、在系统中重启至recovery模式(需要root权限或者相关软件)
3、在系统中设置了恢复出厂设置(选择了这个功能后,系统会重启至recovery模式)
从上面的几个进入recovery模式的方式中,我们可以发现几个问题:
1、如何实现组合按键进入recovery模式?
2、如何实现系统重启进入recovery模式?
3、进入recovery模式的流程是?
我们来看看这些问题:
1、如何实现组合按键进入recovery模式?
答:要实现组合按键进入recovery模式,我们应该在uboot中实现按键检测的功能。
但是我们又该在哪里实现这个按键检测的功能?
想想,我们应该在uboot初始化完硬件,检测按键进入到命令行的这个位置加上按键检测的功能。至于在哪里初始化按键操作这个就不用我说了。
检测到组合按键之后,又该如何跳转到recovery模式?
从uboot跳转到recovery模式和从uboot跳转到kernel的方式是一样的,通过bootcmd配置参数,加载对应的recovery.img或kernel.img,并进入。
2、如何实现系统重启进入recovery模式?
答:这回答这个问题之前,我们需要知道系统重启指的是软重启,而不是硬件复位或者掉电重启。软重启的话,CPU内部的大部分寄存器会重置,RAM的数据也会丢失。
在这种情况下要实现从系统中传递参数或者标志给uboot,让uboot知道你要进入到哪个模式,就需要设置一些参数,可以在这种情况下都保存的。如:把参数保存到Nand中,
或者写入参数到CPU的一些不变的寄存器中(软重启时不被重置的寄存器)。只要实现软重启在系统中传递参数到uboot,那么就差不多了。然后在uboot根据这个参数来进入
到recovery就OK。如果使用CPU的寄存器传递,那么请参考你的CPU的reset部分的寄存器,看看哪些是软重启不重置的。
3、进入recovery模式的流程是?
答:整体流程就是: uboot --> 检测到进入recovery的条件 --> 传递内核参数、加载kernel --> 加载recovery的文件系统。
在这里有必要说一下,这个recovery.img有两种形式:一种是包含boot信息、kernel和recovery微型文件系统压缩而成的镜像,另一种是只包含recovery文件系统未经压缩的镜像。如果是使用前者,则必须要能识别到kernel的入口地址和recovery的入口地址。
下面来看一个非常重要的情况:
uboot进入系统和uboot进入recovery的区别在哪?
首先,我们来看看uboot是如何引导进入系统的:
在uboot初始化完一些操作后,需要指定kernel的入口地址和ramdisk文件系统的入口地址。使用bootm把kernel和ramdisk加载到RAM指定的位置,然后加载到RAM指定的kernel的起始地址,这样系统就会进入kernel。进入kernel的同时,也把ramdisk的地址传递进去了,这样在kernel完成一些操作后就会进入到ramdisk文件系统,最后进入到系统。
然而,uboot引导进入recovery却有点不同:
在uboot初始化完一些操作后,检测到进入recovery的条件(可以是组合按键,也可以是软启进入recovery传递下来的参数),然后就需要使用确定kernel的入口地址和recovery文件系统的入口地址。在这里,如果你的recovery.img是纯文件系统的,那么方式跟进入系统的一样,只不过是地址稍微有点不同而已。如果recovery.img是包含kernel和boot的呢过信息的。那么bootm只需要加载recovery分区的信息到RAM,然后指定这个起始地址。在准备加载kernel的时候,需要实现解析这个boot的信息,并提取出其中的kernel的起始地址和recovery文件系统的其实地址。这里面需要解压对应的kernel和recovery的ramdisk,并加载到RAM的指定位置中。才可以引导进入到kernel,再进入到recovery。
只要实现了系统软启进入recovery模式,那么恢复出厂设置就差不多完成了。软启进入recovery最终是要修改kernel,在kernel中配置传递的参数,在uboot中获取这个参数来判断是否需要进入recovery。
说白了,要实现recovery和出厂设置只要修改uboot和kernel就OK
其他的请参考下列文章:
Android重启流程
Android Recovery 的流程分析
dm37xx android2.3.4增加recovery升级功能(一)
dm37xx android2.3.4增加recovery升级功能(二)
09年初写的Android Recovery - Coding Guy
【高级开发教程】编译recovery.img教程
1、需要实现恢复出厂设置功能
2、需要实现recovery升级功能(主要是方便用户自己定制ROM)
在移植这个recovery的时候遇到了N多的问题,没人指导,没有可供参考的书籍,只有度娘和谷歌陪伴。下面将会提到一些典型会遇到的问题。
如何进入recovery?
1、开机的时候按下组合按键
2、在系统中重启至recovery模式(需要root权限或者相关软件)
3、在系统中设置了恢复出厂设置(选择了这个功能后,系统会重启至recovery模式)
从上面的几个进入recovery模式的方式中,我们可以发现几个问题:
1、如何实现组合按键进入recovery模式?
2、如何实现系统重启进入recovery模式?
3、进入recovery模式的流程是?
我们来看看这些问题:
1、如何实现组合按键进入recovery模式?
答:要实现组合按键进入recovery模式,我们应该在uboot中实现按键检测的功能。
但是我们又该在哪里实现这个按键检测的功能?
想想,我们应该在uboot初始化完硬件,检测按键进入到命令行的这个位置加上按键检测的功能。至于在哪里初始化按键操作这个就不用我说了。
检测到组合按键之后,又该如何跳转到recovery模式?
从uboot跳转到recovery模式和从uboot跳转到kernel的方式是一样的,通过bootcmd配置参数,加载对应的recovery.img或kernel.img,并进入。
2、如何实现系统重启进入recovery模式?
答:这回答这个问题之前,我们需要知道系统重启指的是软重启,而不是硬件复位或者掉电重启。软重启的话,CPU内部的大部分寄存器会重置,RAM的数据也会丢失。
在这种情况下要实现从系统中传递参数或者标志给uboot,让uboot知道你要进入到哪个模式,就需要设置一些参数,可以在这种情况下都保存的。如:把参数保存到Nand中,
或者写入参数到CPU的一些不变的寄存器中(软重启时不被重置的寄存器)。只要实现软重启在系统中传递参数到uboot,那么就差不多了。然后在uboot根据这个参数来进入
到recovery就OK。如果使用CPU的寄存器传递,那么请参考你的CPU的reset部分的寄存器,看看哪些是软重启不重置的。
3、进入recovery模式的流程是?
答:整体流程就是: uboot --> 检测到进入recovery的条件 --> 传递内核参数、加载kernel --> 加载recovery的文件系统。
在这里有必要说一下,这个recovery.img有两种形式:一种是包含boot信息、kernel和recovery微型文件系统压缩而成的镜像,另一种是只包含recovery文件系统未经压缩的镜像。如果是使用前者,则必须要能识别到kernel的入口地址和recovery的入口地址。
下面来看一个非常重要的情况:
uboot进入系统和uboot进入recovery的区别在哪?
首先,我们来看看uboot是如何引导进入系统的:
在uboot初始化完一些操作后,需要指定kernel的入口地址和ramdisk文件系统的入口地址。使用bootm把kernel和ramdisk加载到RAM指定的位置,然后加载到RAM指定的kernel的起始地址,这样系统就会进入kernel。进入kernel的同时,也把ramdisk的地址传递进去了,这样在kernel完成一些操作后就会进入到ramdisk文件系统,最后进入到系统。
然而,uboot引导进入recovery却有点不同:
在uboot初始化完一些操作后,检测到进入recovery的条件(可以是组合按键,也可以是软启进入recovery传递下来的参数),然后就需要使用确定kernel的入口地址和recovery文件系统的入口地址。在这里,如果你的recovery.img是纯文件系统的,那么方式跟进入系统的一样,只不过是地址稍微有点不同而已。如果recovery.img是包含kernel和boot的呢过信息的。那么bootm只需要加载recovery分区的信息到RAM,然后指定这个起始地址。在准备加载kernel的时候,需要实现解析这个boot的信息,并提取出其中的kernel的起始地址和recovery文件系统的其实地址。这里面需要解压对应的kernel和recovery的ramdisk,并加载到RAM的指定位置中。才可以引导进入到kernel,再进入到recovery。
只要实现了系统软启进入recovery模式,那么恢复出厂设置就差不多完成了。软启进入recovery最终是要修改kernel,在kernel中配置传递的参数,在uboot中获取这个参数来判断是否需要进入recovery。
说白了,要实现recovery和出厂设置只要修改uboot和kernel就OK
其他的请参考下列文章:
Android重启流程
Android Recovery 的流程分析
dm37xx android2.3.4增加recovery升级功能(一)
dm37xx android2.3.4增加recovery升级功能(二)
09年初写的Android Recovery - Coding Guy
【高级开发教程】编译recovery.img教程
相关文章推荐
- 从零开始——Android 4.0 实现recovery模式,出厂设置功能
- 从零开始——Android 4.0 实现recovery模式,出厂设置功能
- 在android2.3.4samgsung 210下编译ramdisk-recovery-uboot.img实现恢复出厂设置
- Android L集成新特性之恢复出厂设置保护之如何实现,类似苹果ID的远程控制功能
- 【Android架构设置篇】之设置界面添加并实现永不休眠功能
- 第58章、拍照功能实现(从零开始学Android)
- Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
- Android L集成新特性之恢复出厂设置保护之如何实现,类似苹果ID的远程控制功能
- Android 利用Properties实现设置本地保存功能
- Android Recovery:功能简介。Recovery模式介绍
- 第58章、拍照功能实现(从零开始学Android)
- Android实战简易教程<二十七>(Android设置头像上传功能实现)
- Android开发实现AlertDialog中View的控件设置监听功能分析
- Android设置头像上传功能实现
- Android Recovery:功能简介。Recovery模式介绍
- android系统设置里的触摸提示音功能怎样实现开启和关闭?
- Android之数据存储共享参数实现系统设置操作功能(二)
- Android从零开始之一步一步教你实现联系人功能(一)
- Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
- Android实战简易教程-第二十八枪(基于Bmob实现头像图片设置和网络上传功能!)