最近在做ota,有一个地方想和大家交流下想法。
关于bootloader怎么检测需要app需要升级拷贝!!!
目前升级文件我是在bin文件加了个头部,里面包括bin文件实际大小,crc32,固件版本号等信息。
在升级时,由app下载文件到download区,然后重启进入boot。。
我现在只能通过版本号来判断是否需要升级,但是我希望通过crc32。比如boot计算好当前app的crc32,然后和download区的升级文件crc32做比对。
但是这就遇到问题了,boot无法知道当前app的实际大小!
大家有什么好的想法
gcc和keil我都做过在固定位置存储一段信息,可以保存自身的程序大小等信息。keil好做些,gcc要修改ld文件,添加一些段实现,这样boot接收到app固件后,从前面多少个字节后直接读取就能读到app的相关信息。
CRC32只适用于一般完整性校验,不适合作为版本迭代依据。对于常规手段来说,头里面加点信息就好了。如果对于bin文件做深度加工,满足安全加密需求,选用Block形式的存储方式,例如UF2,我觉得是比较优雅的。
在APP程序里面通过(__at()) 关键字预留好crc32和app_size的空间, IDE编译出BIN之后通过python工具计算整个二进制文件的crc,读取大小之后修改BIN文件生成升级包。感觉只能这样了。
可以考虑把 download区 再分成2部分:
这个事情就麻烦了,开发人员需要手动看下bin文件大小,然后再写进预留字段中。无法实现自动化
做成脚本不行吗,非得人工智能啊