在线时间4067 小时
UID3441752
注册时间2017-11-21
NXP金币759430
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32003
- 最后登录
- 2024-4-9
|
MCU-OTA参考解决方案
1. 全面且灵活的MCU-OTA工程
OTA的全称是Over-The-Air,泛指对某个嵌入式系统的软件在线升级。
就MCU系统来说,目前主要是对整个Firmware进行在线更新,所以也称之为FOTA,本文中OTA与FOTA同义。
我们构建了一个适用于恩智浦MCU平台的OTA参考工程,客户可以基于这个工程开发适用于自己项目的OTA系统。
请从如下链接获取工程源代码和文档:
Bootloader: https://github.com/NXPmicro/sbl
Firmware: https://github.com/NXPmicro/sfw
用户手册:https://github.com/NXPmicro/sbl/tree/master/doc
和 https://github.com/NXPmicro/sfw/tree/master/doc
对于这个复杂的工程,我们尽力做到了全面和灵活的平衡,全面主要是指:
包含bootloader(SBL)和firmware(SFW)两个独立git工程
支持9个NXP MCU平台,多种OTA方式,完善的安全策略,丰富的开发环境,详细的文档资料。
看看有没有你在用或者感兴趣的平台
作为MCU工程师,首要解决的问题就是开发环境。MCU-OTA工程支持Linux主机GCC_ARM编译开发,Windows主机GCC_ARM、IAR、MDK编译开发调试环境。
我们又是怎么做到灵活的呢?
解耦:不同平台之间没有任何关联,git clone或者下载代码后,可仅保留你用到的平台代码,其他平台文件夹可以直接删除。(当然轻clone也可以达到相似效果)
裁剪:引入Kconfig(menuconfig)机制,半图形化的配置方式和宏的自动关联管理,方便客户对工程特性进行裁剪配置。
预设:MCU-OTA工程是基于NXP MCU EVK开发板开发的,每个开发板都有特定的Flash芯片,但是我们在MCU-OTA工程里预设了多种类Flash芯片数据,客户只需要选择自己使用的Flash芯片,MCU-OTA会自动获取对应的参数,方便客户的代码快速在Flash上跑起来。
分层:我们尽力做到代码层次清晰,客户可以方便的增加自己的代码,或者从MCU-OTA工程里提取自己需要的代码。
2. 先看看总体架构
下图展示了MCU-OTA工程的系统概念。
MCU硬件系统:MCU-OTA基于NXP的EVK开发板开发
SBL:SecureBootloader,负责验签,烧写,交换,失败回滚Firmware,支持In-System-Program (ISP)功能,方便烧写Firmware
SFW:SecureFirmware,基于FreeRTOS的Firmware实例,支持SD卡,U盘,AWS,和Aliyun等OTA例程
Host Tool:Windows或者Linux主机工具,用来创建、烧写、签名,加密SBL和SFW可执行镜像,由多个独立的工具软件组成
更多的功能特性,让我们来看系统框图。
基于NXP Soc完善的安全硬件模块,SBL和SFW可以方便的实施验签,加密等安全OTA策略。同时可以使用硬件加速MbedTLS的某些加密算法。
从上图可以看出,SBL是基于open source的MCUBoot工程,加上Scons工程编译工具,Kconfig工程配置工具,NXP MCUSDK driver代码等创建而成的工程。其重点不仅在于对OTA的支持,更在于对安全加密功能的实现。同时,基于NXP MCU的硬件Remap功能,SBL优化了OTA时对Firmware镜像的交换操作,取消了对Flash的频繁擦除和烧写,在执行时间和Flash寿命方面有显著优化。更多的SBL特性,请参阅ReleaseNotes和User Guide文档。
基于最广泛使用的FreeRTOS实时操作系统,我们创建了SFW工程,并采用与SBL相同的Scons + Kconfig方式组织代码的编译与配置。同时根据不同板卡硬件特性,集成了U盘,SD卡OTA功能,远程OTA方面,支持AWS和Aliyun两个云服务商。另外,我们把需要与SBL配合的操作,集合在了一个C文件和一个头文件中,客户在不使用SFW的情况下,可以方便快速的在自己的Firmware项目中集成这两个文件,从而方便的与SBL配合完成OTA功能。
在烧写镜像,配置eFuse,生成密钥,对镜像进行签名、加密方面,你需要一些运行在Host主机侧的工具。不要担心,NXP提供了完备的解决方案,请参阅UserGuide下载使用相关的Host Tools。
3. 适合MCU用户的开发习惯
做为一个MCU平台工程,肯定要想MCU客户之所想。首当其冲的是开发环境问题。我们不赞成把一个“Linux +make + makefile + GCC_ARM”的环境强加给客户,徒增产品开发的难度。毕竟很多MCU客户并不需要熟悉Linux环境,IAR, MDK,以及其他Windows环境下的IDE集成开发环境很好用,也很容易上手。这一点,RT-Thread做了很好的工作。我们也在参考了其架构的基础上,采用Scons + Kconfig来组织编译SBL和SFW代码。
Scons是一个开源项目,相关资料网上很容易查到,不再赘述。你可以把Scons理解成make,只不过它是用Python写的,跨平台支持,脚本可读性和命令扩展性是它的优点。
那么客户是不是需要先安装Python呢?不需要!我们的SBL和SFW工程自带了Python环境,其实不仅仅是Python环境,包括Windows下的命令终端器,Kconfig命令,以及其他用得到的环境命令,都已经被包含在工程里了。当你git clone,或者直接下载压缩包获取到SBL/SFW工程源代码后,不需要任何额外的环境建设(当然Git、IAR、MDK还是要自己安装的),可以直接根据UserGuide或者README里的Quick Start,开始上手编译调试工作。
注:Linux主机环境需要自己安装Python3.6,Scons等支持包,都玩Linux了,这些肯定不是问题。
MCU用户没听说过Kconfig?没关系!以程序员的智商和思维方式,根本不用学,上下左右箭头,回车键来回捣腾捣腾,都明白了。看看下图,不需要过多解释吧。至于用Linux环境开发的用户,就更不用啰嗦了吧。
通过Kconfig对代码进行配置裁剪完成后,就可以执行scons --ide=iar,或者 scons--ide=mdk5生成对应的IDE工程,然后,愉快的玩起来吧!
4. 安全的OTA
大家知道NXP的slogan么?打开NXP的芯片手册,或者各种培训资料,你大概率能找到这句话:
同样,在SBL和SFW工程里,双击某个平台的env.bat后,我们也打印了这句话。
其实从项目工程的命名,你也应该能感觉到我们想把重点放在哪儿,SBL、SFW里的S,并不是Secondary,而是Secure的意思。万物互联的时代,裸奔会是件极其危险的事情。
NXP一向以安全著称,我们的Soc内置了完善的硬件安全引擎,支持丰富的加密算法。我们的BootROM代码在定义开发阶段就一直把安全作为首要任务,作为信任根随Soc一起流片。MCU-OTA工程就是想基于NXP完善的硬件安全引擎,为客户展示一个完整的OTA信任链。
在SBL的Release Notes里,展示了各平台已经支持的安全策略。
All platforms: RSA(2048), ECDSA(P256) signand verify by software
evkmimxrt10xx:
Soc sign-verify: HAB RSA(2048,3072,4096)
Soc encrypted XIP boot: Yes
evkmimxrt1170:
Soc sign-verify: HAB RSA(2048,3072,4096),HAB ECDSA(p-256/384/521)
Soc encrypted XIP boot: Yes
evkmimxrtxxx:
Soc sign-verify: ROM RSA(2048,3072,4096)
Soc encrypted XIP boot: Yes
lpc55s69:
Soc sign-verify: ROM RSA(2048,4096)
Soc encrypted XIP boot: Yes
安全特性方面更多的细节,请参考User Guide。
5. 持续支持与开发
如你所见,目前MCU-OTA工程(SBL, SFW)已经支持NXP的9个MCU平台。
后续我们会增加对NXP其他MCU平台的支持,包括新出的MCU芯片。
在OTA和安全特性方面,我们很乐意听取客户的意见,持续优化和解决问题。同时,我们也欢迎直接在Github平台给SBL和SFW工程提交patch,与客户的交流与协作对我们很重要,帮助我们共同成长,谢谢!
|
|