ConnectCore MP157是Digi推出的一款基于STM32MP157并符合物联网安全准入要求的嵌入式ARM核心模组,该片上系统模块带有两个Cortex A7核和一个Cortex M4单片机核, 集成有GPU, SLC工业级NAND闪存和DDR3 RAM, 千兆以太网口和两路高速CAN-FD,并支持多达8路串口,多路SPI和I2C等接口, 集成好802.11a/b/g/n/ac WiFi和蓝牙Bluetooth 5.2无线支持。
由于使用了STMP157系列中的顶级芯片,支持完整的安全功能,所以在启动上和一些非安全的ARM系统有所区别。创建可信执行环境TEE (trusted execution environment)是实现安全功能的目标,而Arm很早就引入TrustZone作为架构的可选的安全扩展。TrustZone是在CPU和内存中区隔出两个空间:安全空间(Secure world)和非安全空间(non-Secure world),从而实现对不同数据和外设的访问权限。一般手机上的应用如指纹识别,人脸识别,移动支付,企业应用,数字版权保护等等,都是基于TrustZone来实现保护的。随着物联网安全意识的提升,许多工业ARM应用中也开始普及这一安全功能的支持。
ConnectCore MP15使用NAND闪存作为主要存储介质。闪存根据 U-Boot 变量mtdparts划分为多个逻辑分区,默认采用双启动布局,主要分区包括:FSBL,metadata,fip,UBI,UBI2五个,将 U-Boot 环境和Linux内核分区作为 UBI 卷包含在UBI分区中,而rootfs分区和用户数据分区作为另一UBI卷放在UBI_2分区中。
TF-A是Trusted Firmware Project中的一个项目,为ARM A-Profile架构处理器提供了安全软件的参考实现。在ConnectCore MP157中,TF-A固件一般以tf-a-<平台>.stm32命名,它是ROM加载的第一个固件,由它来引导后面的固件,用户一般不需要改变它。
OP-TEE即开源可信执行环境,这个固件提供一系列机制来访问安全空间的各种服务,在 CCMP157中, FIP分区代表固件镜像包, FIP 镜像包含可信执行环境 (基于OP-TEE)固件和 U-Boot 引导加载程序。TEE固件最终加载UBoot并引导进入系统。
Digi支持双引导系统来为用户提供更安全的系统环境。双引导系统的NAND被组织为具有重复的系统分区:linux和rootfs。系统知道哪对分区是“活动”系统,因此对“非活动”分区执行系统更新。
在CCMP157中,可以通过UBoot命令实现双启动和单系统布局的切换,默认是开启双引导启动机制,如要切换成单系统布局,请执行以下命令:
setenv dualboot no
run ubivolscript
saveenv
系统分区的UBI卷如图所示。
通过分析ConnectCore卡刷包中的卡刷脚本,可以了解到完整的启动过程逻辑。系统上电后,首先加载fsbl分区中的TF-A固件,随后加载FIP镜像中的TEE固件来完成Secure World系统相关服务的初始化,然后加载UBoot并引导进入Linux系统。
使用双启动机制,即使在断电的情况下,更新也始终是安全的。不需要恢复内核,因为拥有两个副本可以保证可以更新非活动的引导分区。成功安装新系统映像后,引导加载程序将加载该新映像。引导成功后,更新的映像将被视为活动系统。
默认情况下,ConnectCore MP15 启用双引导启动机制。可通过SD卡刷的方式,在 A 和 B 分区上执行固件的首次部署。你也可以使用UUU工具来完在固件首次部署。当您有足够的知识,也可以用手动方式,创建分区表,通过网络来进行固件更新。
在产品后续开发和迭代过程中,Digi的SOM也支持在运行嵌入式Linux的同时,通过网络在在线OTA,以及二进制增量OTA升级等多种方式来进行系统更新。通过Digi的DRM设备云服务,可以配合版本代号和profile特性来批量进行相关的系统更新推送。请参考官方文档获取更详细资料。