OTA系统升级
烧录/升级系统
将编译生成的可执行文件包通过各种方式写入到硬件设备的过程称之为烧录(Flash)。烧录方式有很多,比如:SD卡工厂烧录,USB方式,专用的烧录工具,网络连接方式,设备BootLoader+fastboot模式(即通常说的“线刷”),recovery方式,OTA(Over The Air)。
不管是那种方式,都可以总结为三个阶段:
- 生成升级包
- 获取升级包
- 执行升级过程
1、生成升级包
OTA中 生成的升级包有两种:完整升级包和差分升级包。
差分升级包中的内容就是A和B版本的差异化内容。
2、获取升级包
有两种:在线升级和本地升级。
在线升级:开发者需要将编译的OTA包上传到网络存储服务器上,然后用户可以直接通过终端访问和下载升级文件。通常我们将下载到的OTA包存放在设备的SD卡中,命名为update.zip。
本地升级:直接将update.zip包放置SD卡根目录下,再手动进入升级模式。
3、执行升级过程
OTA升级最关键的阶段就是这里——recovery模式,俗称“卡刷”。
什么情况下会进入recovery模式?
1、在开机时按下power + volume[+] 键(注:按power + volume[-] 会进入fastboot模式)。
2、如果没有检测到上述组合键,再检测是否有系统指定进入命令。即,在某些情况下系统会主动进入recovery模式,如:OTA升级在当OTA包下载完后系统需要重启进入Recovery模式进行。
OTA升级过程:
(1)OTA包的下载,下载包名为update.zip,存储在SDcard根目录下;
(2)系统在/cache/recovery/command中写入 “--update_package=[路径名]”;
(3)系统重启后检测到command命令,故而进入recovery模式;
(4)get_args将在BCB中写入“root-recovery”和 “--update_package=[路径名]”,这样即便此时设备重启,也会尝试重新安装OTA升级包;
(5)install_package开始安装OTA升级包;
(6)finish_recovery擦除BCB,这样设备重启后就可以进入正常的开机流程了;
(7)如果install安装失败的话:
prompt_and_wait显示错误,并等待用户响应;
用户重启。
(8)main调用maybe_install_firmware_update,OTA包中还可能包含radio/hboot firmware的更新;
(9)main调用reboot重启系统。
recovery不但负责OTA省级,而且也是“恢复出厂设置”的实际执行着。
恢复出厂设置步骤:
(1)在设置下执行恢复出厂设置;
(2)Android系统在/cache/recovery/command中写入“--wipe_data”,该命令可以擦除用户数据user data并重启;
(3)设备重启后发现了command命令,于是进入recovery;
(4)recovery将在BCB(bootloader control block)中写入“boot-recovery”和“--wipe_data”,具体是在get_args()函数中,这样即便设备此时重启,也会再进入recovery;
(5)通过erase_volume来重新格式化/data分区;
(6)通过erase_volume来重新格式化/cache分区;
(7)finish_recovery擦除BCB,这样设备重启后就可以进入正常的开机流程了;
(8)main调用reboot重启系统。
----------