02 STM32嵌入式软件架构

STM32嵌入式软件架构

一、TrustZone分隔下的两个世界

ARM对体系架构的规划思路在其开发的TrustZone技术中体现的淋漓尽致:该技术将系统分为Secure worldNon-secure world,即安全世界非安全世界

其中,Secure world是ARM架构中的高度受保护的执行环境,用于处理敏感的安全任务,如加密、身份验证和安全密钥管理等。在Secure world中,运行的代码和数据具有高度的保护性,通常需要硬件支持和特殊的安全特性。Secure world通常是与TrustZone技术结合使用的,它提供了硬件隔离,以防止非授权的访问。

Non-Secure world是ARM架构中的常规执行环境,用于处理通用任务和应用程序。通常,操作系统和普通应用程序在Non-Secure world中运行。与Secure world相比,Non-Secure world的安全性较低,不同级别的访问控制较少。

通过将这两个世界分开,ARM体系结构可以提供硬件级别的安全隔离,以保护安全关键任务免受潜在的恶意代码或攻击的影响。这种安全分离对于在移动设备、物联网设备、服务器和其他领域中保护敏感数据和操作非常重要。

二、STM32嵌入式软件架构

STM32嵌入式软件架构如下图所示:

在这里插入图片描述

在上图中,我们聚焦于Cortex-A7(STM32MP157虽然还有一个M4单核,但是目前我们用不上)。在此可以清晰的看出,ARM将Cortex-A7分为了四个象限:三四象限为内核空间(Kernel space),一二象限为用户空间(User space);二三象限为安全内容(Secure context),一四象限为非安全内容(Non-secure context)。

1. 内核空间(Kernel space)
1.1 Cortex-A7内核中的安全内容(Secure context)

这个部分可以说是整个Cortex-A7内核中最重要的部分,因为在其中运行的是确保安全的两个固件:OP-TEETF-A,二者分别负责不同的任务。

TF-A是一个开源的、可信赖的固件层,旨在为ARM Cortex-A处理器系列提供安全启动、初始化和运行时支持。在启动流程中,TF-A最先启动,它负责系统引导和硬件初始化。在上一节启动流程中我们已经讲过,在安全启动(Secure boot)模式下,在嵌入式Linux启动链条(Boot chain)中,TF-A经常作为FSBL来对硬件进行鉴权(authentication)。

OP-TEETF-A相似但不同,它是一种可信执行环境(Trusted Executable Environment,TEE)框架,适用于所有ARM架构的系统。在STM32MP1系列处理器上,OP-TEE必须在TF-A的基础上运行。

一句话总结:TF-A用于初始化系统并建立安全环境,而OP-TEE用于在该安全环境中运行安全任务;二者结合使用,就能实现安全、可信任的执行环境。

1.2 Cortex-A7内核中的非安全内容(Non-secure context)

这个部分已经进入了非安全世界,在嵌入式Linux启动流程中属于SSBL部分,是一个供用户使用和定制的世界,故而其功能就更加丰富。

在这里,我们可以使用U-Boot作为引导加载程序(bootloader)来对部分硬件进行初始化,比如网络适配器(用于以tftp进行网络挂载)、外部闪存(用于挂载存储于EMMC或者NAND中的Linux内核和设备树文件)、外接显示器(给用户以更方便的使用体验)等。

到此为止,由TF-AU-Boot组成的启动链条(Boot chain)就结束了,下面由U-Boot引导的Linux内核就会随之启动,而Linux内核中包含的内核驱动会对众多硬件进行初始化,其中包含的硬件如下图所示:

在这里插入图片描述

以上1.1节和1.2节中所述的部分共同组成了内核空间的安全内容。

ST公司为了帮助开发者在这些硬件平台上轻松构建嵌入式系统,尤其是嵌入式Linux系统,将以上部分综合成一种软件支持包,命名为OpenSTLinux BSP(Board Support Package)。

2. 用户空间(User space)
2.1 用户空间中的安全内容

这部分空间运行的主要是第三方开发的受信程序,他们是受硬件隔离和保护的,依赖于OP-TEE核心运行。通常用于处理敏感的安全任务,例如加密、身份验证、数字签名、访问控制和密钥管理等,如下图所示:

在这里插入图片描述

2.2 用户空间中的非安全内容
2.2.1 Linux middleware

在这部分运行的一些应用框架和软件程序,它们既不属于Linux内核或者硬件驱动程序,也不属于普通的应用程序范畴,它们运行在硬件驱动和应用程序之间,因此被叫做Linux middleware,如下图所示:

在这里插入图片描述

在上图中,可以看见很多我们熟悉的“朋友”,比如用于构建根文件目录的busybox工具,用于安装、卸载和更新应用程序的apt(Advanced Package Tool)工具,用于处理环境变量的bash(Bourne-Again Shell)工具,用于文本搜索和匹配的grep工具,用于加载不同模块的kmod工具,用于串口通讯的minicom工具,用于获得动态IP地址的dhcp(Dynamic Host Configuration Protocol)工具,它们都是Linux middleware。

2.2.2 Linux应用程序

这些就是我们日常在系统中使用的应用程序,在具备图形化界面的Linux系统(如Ubuntu、CentOS等)中,它们是我们熟悉的VS Code、Google Chrome等;在基于STM32的嵌入式Linux系统中,用户获得了更大的自由度,我们可以根据自己的需要开发应用程序,并在系统中运行。

到此为止,如果你使用的是STM32系列的芯片,那么以上四部分内容共同组成了OpenSTLinux框架。

ST公司将其分为了三大部分:

  • OpenSTLinux BSP:包含完整的启动链(TF-A、OP-TEE和U-Boot)以及Linux内核
  • Linux Middleware
  • 受信的第三方应用程序(属于用户空间内的安全内容)

三、总结

在这部分我们简单的介绍了STM32嵌入式软件架构,理解了在软硬件层面构建安全世界和非安全世界的必要性。可以发现,在操作开发板、安装Linux系统内核之前,还是有很多准备工作要做的:比如让我们的芯片和开发板上的硬件“认识一下”(移植TF-A);给Linux系统安装恰当的引导程序,让它顺利的启动(移植U-Boot);给Linux系统建立适当的根文件目录(移植Busybox/Buildroot),将各个硬件安装驱动程序存储其中,从而顺利的调用它们,等等。

本节内容和上节内容,在初学者看起来,必然是十分抽象而难以理解的,不过当你走完了整个的学习流程,在开发板上顺利的安装了嵌入式系统并实现了一些功能,再回看的时候,就会充分理解系统架构作为一种顶层设计的重要性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值