我们将创建一个带有GSM调制解调器的ARM板。
我们希望能够通过无线方式升级ARM固件。
有没有好的,可靠的开源解决方案?
如果没有,是否有带有此功能的付费OS?
我们将创建一个带有GSM调制解调器的ARM板。
我们希望能够通过无线方式升级ARM固件。
有没有好的,可靠的开源解决方案?
如果没有,是否有带有此功能的付费OS?
Answers:
我不知道任何预制的解决方案,但是我将描述我如何在一个项目中解决它。这并非完全“牢不可破”,但我不知道它无法完成数千次升级。对于此应用程序,非常低的故障率仍然比必须获得设备访问权要便宜。
主应用程序在其常规通信协议中添加了三种附加的数据包类型,其中包括错误检测和位于顶部的重试策略。
开始固件更新命令清除外部SPI闪存中的保留存储区。如果本机使用备用电池供电,或者使用外部电源供电但电池电量低于25%,则返回错误。
写块命令接受偏移地址和以小块形式写入外部闪存的数据。更高级别的协议负责错误检测和重传。写入每个块后,将在确认命令之前对其进行回读和验证。
完成固件更新命令包括所接收固件应具有的长度以及整个映像的CRC32,以进行进一步验证。如果与外部闪存的内容匹配并且电源状况仍然可以,则长度相同,并且将CRC32连同“魔数”一起传输到EEPROM区域,以指示固件更新正在等待中。
在主应用程序中执行硬循环以强制看门狗重启。
引导加载程序(位于ARM闪存的写保护区域中)会在EEPROM中看到幻数,并再次验证映像的CRC32。如果一切正常,它将图像从外部Flash传输到ARM Flash的主程序区域。
暂挂的升级信息已从EEPROM中清除,并且硬循环强制重新启动。这次,引导程序将正常启动主应用程序。
虽然我从未见过更新阶段使用此方法在部署之前无法测试新固件版本至关重要。如果新版本无法连接到GSM网络并不能接受将来的更新命令,则将需要现场固件更新。
您正在运行Linux,RTOS还是裸机?如果使用Debian,可以快照当前文件系统,通过“ apt-get”进行升级,然后根据更改是否起作用保留或回滚更改。