20200312:今天在做新日电动车指纹模块的项目时,需要对已发出的2台设备远程升级。发现升级完之后,2台设备居然直接死机,没有指示灯反应。
而后下午在公司对本地设备进行升级,起初发现升级之后的设备都出现死机现象。
第一步:开始从硬件上查找问题,是否是新程序的外部FALSH有问题,经过反复的读写操作后发现没问题:
第二步:对bootloader程序进行在线调试,发现是栈顶地址校验过不了,(栈顶地址就是应用程序跳转第一个U32地址)。随后我用新程序对已经死机的设备进行直接下载调试,发现在线调试的bootloader程序栈顶地址校验居然又通过了!!!神奇!!
第三步:我把怀疑对象放到OTA打包软件上,我把bin文件打包之间和打包之后用010edit软件进行对比发现,除了打包之后增加的16字节数据包包头,其他数据是一毛一样的!说明打包软件没有问题!
第四步:最后我通过大量的网上资料查阅栈顶地址校验失败,已经OTA程序例子对比发现,我的校验逻辑是OK的!
第五步:这时候机智的我通过在线调试,查看iar的memry功能,发现我生成的bin文件首地址和memry中看到的首地址内容不一样!!! 开始怀疑是公司的加密系统搞的鬼!我试着去解密生成的bin文件。发现果然被加密了! 但是!我之前都是没有加密的,之后发现只要我的文件超过100K都会被加密。太难了,花了我半天时间!!以此记录一下