在这里插入图片描述

摘要

本文介绍当前主流OTA固件升级的技术框架,功能:无感升级、固件备份、看门狗钩子APP检验,描述了硬件架构、软件架构、APP软件流程、BOOT软件流程等内容。

硬件架构

需要用到的主要硬件设施

  • 主芯片,待升级的硬件
  • 片外flash芯片,用来存储新固件和备份固件
  • EEPROM芯片,用于存储升级相关过程信息
  • 无线通讯模块(WiFi或蓝牙),用于无线传输升级数据
  • GUI,控制升级开始与停止
    在这里插入图片描述

软件架构

用于升级部分的软件架构

  • 升级管理,控制升级过程的状态、流程
  • 中间件
    • SFUD,一个开源的轻量级 串行 Flash 通用驱动库(Serial Flash Universal Driver),专为嵌入式系统设计,用于操作常见的Flash 芯片。支持自动识别 Flash 芯片型号、读写操作、擦除操作、以及 Flash 的统一接口管理。
    • Ymodem,一种串口文件传输协议,广泛用于嵌入式系统中通过串口(如 RS232、USB 虚拟串口等)进行固件升级(IAP)或文件传输,支持批量传输、文件名传输、文件大小传输等功能,适用于需要从 PC 向嵌入式设备发送固件、配置文件等场景。
  • BSP,UART、SPI等驱动
    在这里插入图片描述

APP软件流程

APP中固件升级流程,主要用于无感升级中的固件下载,具体过程见流程图
在这里插入图片描述

BOOT软件流程

主要用于固件的下载、解密、固件备份、固件检验等,其主要过程见流程图
在这里插入图片描述

内容补充

APP合法性检验机制

  • CRC校验,使用CRC校验,对固件每包数据进行校验
  • 看门狗钩子式APP校验,主要思路:新固件升级后,首次运行前,在boot中开启看门狗,跳转APP,APP运行修改存储区某特定区域数据,然后看门狗导致复位,重新恢复到boot状态,boot再次检查数据是否被修改,如果被修改则认为APP正常(大概率),如果没有修改成功,则认为APP异常(例如APP卡死)。这种方式就相当于向黑暗处扔个钩子,看门狗时间到后看钩子带回来的数据是否正常。

其他知识补充

AES密匙

固件加密的密匙可以由几部分构成:芯片UID+产品生产编号+随机号

  • 芯片UID:将软件与硬件绑定,使软件盗版者无法将软件复制到复刻的板子上运行,检查到UID异常,可自毁程序。UID的获取不用手动挨个读取,方法见后续文章。
  • 设备编号:使每个设备的密匙不同,软件中记录设备编号信息,配合其他功能检验该套软件及硬件是否属于某设备,防止盗用者将软件和硬件整体移动到某设备上。
  • 随机编号:使用随机编号进一步加强密匙加密强度,高级大批量设备可以用此,以防止代工厂悄悄复制多下载程序,具体怎么实现,下回见分晓。

程序加密的攻击与防御

没有绝对可靠的程序防御措施,各种加密仅仅能使盗版更加麻烦,防止顺手牵羊。例如做了AES加密传输,到APP升级好后,攻击者可用一小段程序替代boot,该程序可以将所有flash内容从串口中打印出,前面种种加密,在各种攻击手段下也会显得苍白无力。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐