在一个实际运行的无线远程监控系统中应用本更新机制,以验证和测试其性能。首先对更新进程的运行效果进行测试。结果表明,每次测试更新进程均能正确的启动与控制模块之间的数据传输,通过在应用层引入确认和重传机制,新程序的镜像文件均能通过Internet和无线网络准确的传输至前端运行模块。测试的重点是系统软件更新完毕后新程序启动的可靠性。对软件更新过程中遇到的干扰和数据错误采取模拟的方式,以此测试bootloader能否正确的启动备份程序。测试中模拟了3类情况:一类是FLASH上的程序镜像文件随机的在某些地址处出现数据错误,另一类是FLASH上的程序镜像文件随机的出现某些数据的地址错位,第三类是启动点的数值发生错误。将这3类情况分为6种具体方案进行测试,每个方案测试20次,查看系统能否按照期望的结果启动程序镜像。测试方案及结果如表1所示。
从测试结果中可以看出,本更新机制对FLASH中的数据错误识别效果最好,每次启动时均能正确地进入异常并启动备份程序;对FLASH中的数据地址错位的识别率也达到了80%以上。当程序的数据正确但存放地址错位时,存在一定的概率会使得ARM处理器取出的指令是可以识别和执行的,从而使程序运行到未知状态而导致系统无法启动。此外,更新机制对配置区具有较强的修复能力,防止了因为配置区数据出现错误而导致无法启动的情况的发生。实验平台的测试结果表明本更新机制能有效地提高嵌入式软件更新后重新启动的稳定性和可靠性,具有较强的自我恢复能力。
5 结语
本文以提高可靠性为设计目标,提出了一种基于bootloader的嵌入式软件远程自动更新机制。本更新机制由于同时保存了三个镜像文件,因此需要更多的FLASH存储空间,略微增加了嵌入式系统的硬件成本。但相对于更新机制的远程化、自动化和可靠性所带来的维护成本的巨大降低,这个代价是值得的。
本文主要创新点:通过设置两个备份程序存储区,利用嵌入式处理器的异常机制,使嵌入式系统的更新具有了较强的自我恢复能力,较大的提升嵌入式软件更新过程的可靠性,尤其能够有效地防止嵌入式系统更新后出现的系统启动失败的情况,具有较高的实用价值。另外,通过CDMA系统实现远程自动更新,可以摆脱地域限制,不受布线的束缚,提高了嵌入式系统远程更新的便捷性。