| 帮同学宣传一下http://shop57644665.taobao.com/ |
FOTA在中国移动终端管理中指的是将手机软件由旧版本升级到新版本的实现部分。其原理是首先根据特殊的算法将新旧版本之间的差别做成一个差分包,然后手机从网络上下载到手机中,然后重新启动。在手机重启时通过对应的算法读取差分包中的信息,然后通过直接擦写flash的方式完成版本的更新。
版本更新时运行的程序当然是放在bootloader 那部分的,这部分代码一般来说是不会被更新的,因为如果这部分flash在更新时被擦除,代码被擦除后就无法继续进行了。当然如果一定要对这部分进行更新,那么就必须将这部分代码放到ram中去执行。
Flash擦写是以block为单位的,这是flash的驱动决定的。FOTA更新和恢复现场需要对版本进行校验,是通过对每个flash block中数据的checksum来进行的,以此来决定该block是否已经进行了更新,以及整个版本是不是对应的版本。
更新的区域当然不能包括用户使用的区域,因为这里保存的用户个人的数据。
同时我们手机的flash除了版本外当然必须还有空余的空间用手存放升级的差分包,用于临时使用的备份的flash block,以及为掉电后恢复现场的标志。
只有完全明白FOTA的实现原理,系统工程师才能对系统部分进行重新划分,这其实也是实现FOTA的核心所在。
有无FOTA时对应flash的使用分布情况
Bootloader和Update Agent 部分主要的功能就是实现了通过对差分包信息的提取然后直接擦写flash来完成版本的更新。这里是FOTA的核心程序所在。这部分包括系统的bootloader,FOTA运行时所需要的FLASH,LCD,TRACE等驱动,FOTA运行控制的Update Agent部分。
更新时临时备份区域主要是用来备份flash block 上的数据的,以block为单位。具体需要的空间大小根据update agent需要分配。
标志区域主要是用来标识是否需要FOTA升级,是否升级成功。
关于RAM划分。在FOTA的过程中,除掉FOTA必须的RAM(FOTA部分的全局变量)其余部分都是可用的。也就是说FOTA可以复用版本所使用的RAM,因为FOTA是在bootloader部分,FOTA完成后的正常系统流程会再一次对全局变量进行清零等操作。
需要注意的地方:
Flash的擦写函数需要放到RAM中去执行,因为同一块bank不能同时读写。Flash的驱动是放在bootloader部分的,因为该段使用较小,不可能独占一个bank。
各个段的起始地址一定要以flash的block开始。
Bootloader部分注意不要调用标准的实时库函数,例如memcpy之类,类似copy这样的函数可以自己实现。实时库函数在升级过程中会被完全擦除掉。
Bootloader和Update Agent部分必须完全独立。检验方法一个是从生成的符号表文件中查看该区域是否有其他函数,另一个方法是将除该部分的代码外将其余部分全部擦除,然后开机看能否正常运行。
















