就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工程里提取自己须要的代码。
先看看总体架构下图展示了MCU-OTA工程的系统观点。
MCU硬件系统:MCU-OTA基于NXP的EVK开拓板开拓SBL:SecureBootloader,卖力验签,烧写,交流,失落败回滚Firmware,支持In-System-Program (ISP)功能,方便烧写FirmwareSFW: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。
适宜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工程,然后,愉快的玩起来吧!
同样,在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 softwareevkmimxrt10xx:Soc sign-verify: HAB RSA(2048,3072,4096)Soc encrypted XIP boot: Yesevkmimxrt1170:Soc sign-verify: HAB RSA(2048,3072,4096),HAB ECDSA(p-256/384/521)Soc encrypted XIP boot: Yesevkmimxrtxxx:Soc sign-verify: ROM RSA(2048,3072,4096)Soc encrypted XIP boot: Yeslpc55s69:Soc sign-verify: ROM RSA(2048,4096)Soc encrypted XIP boot: Yes安全特性方面更多的细节,请参考User Guide。
持续支持与开拓如你所见,目前MCU-OTA工程(SBL, SFW)已经支持NXP的9个MCU平台。
后续我们会增加对NXP其他MCU平台的支持,包括新出的MCU芯片。
在OTA和安全特性方面,我们很乐意听取客户的见地,持续优化和解决问题。同时,我们也欢迎直接在Github平台给SBL和SFW工程提交patch,与客户的互换与协为难刁难我们很主要,帮助我们共同发展,感激!