最近开发的一款产品带有网口,还需要能够方便的升级程序,就琢磨着使用网口进行升级OTA。
面临者几个问题,
1.软件固件被随意拿走下载到空芯片内,被轻易的仿制。
2.更新时防止意外情况,升级时断网断电
3.固件下载到错误的硬件型号
4.固件被篡改,或者下载过程中不完整了
针对以上几个问题,
1单片机程序分为bootloader和app两部分,远程升级时只使用app,且bootloader内置加密算法(最终选择AES256对称加密算法)升级的固件APP是加密后的,无法单独使用。
2.单片机存储分为两个分区,app分区和备份分区,下载时先下载到备份分区,再升级到app分区,保证至少有一个可用
3.固件在固定内置型号代码,判断是同一型号再升级
4.固件增加CRC32,hash等校验,校验一致再升级
如何制作固件也是一个难题,最终选用了RTT的一个固件打包器,命令行的版本rt_ota_packaging_tool_cli.exe,编译后先在文件尾添加CRC32校验码,再用打包器生成下载固件和远程升级固件,很是方便
|