STM32MP1xx的启动流程
https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview
根据提供的知识库内容,以下是STM32 MPU启动链的详细解析:
1. 通用启动流程
STM32 MPU启动分为多阶段,逐步初始化外设和内存,并建立信任链:
1.1 ROM代码(BootROM)
作用:首个执行的代码,选择启动设备(串口/闪存),加载FSBL到内部RAM。
安全:验证FSBL的完整性,建立信任链的起点。
存储:固化在芯片ROM中,体积小(几十KB)。
1.2 第一级引导程序(FSBL)
功能:初始化时钟树、DDR控制器,加载SSBL到外部RAM。
实现:STM32MP13/15使用TF-A BL2(Trusted Firmware-A)作为FSBL。
安全:可选认证,支持解密和验证后续组件。
1.3 第二级引导程序(SSBL)
功能:复杂外设驱动(USB/以太网/显示),加载内核到内存。
常用工具:U-Boot(支持灵活启动方式,如网络/USB)。
安全:可选认证下一阶段组件(如内核)。
1.4 内核空间
功能:初始化外设驱动,启动用户空间。
安全:内核运行在非安全上下文(Nonsecure)。
1.5 用户空间
启动:内核启动init进程,执行根文件系统(rootfs)中的初始化脚本。
应用:最终暴露用户界面(如GUI)。
2. 安全与协处理器管理
2.1 安全监控器(Secure Monitor)
作用:管理安全与非安全上下文切换,支持用户认证、密钥存储。
实现:基于Arm TrustZone技术,运行在Cortex-A安全模式(EL3)。
2.2 协处理器(Cortex-M)
启动时机:
早期启动:由SSBL(如U-Boot的rproc命令)加载。
运行时启动:由Linux remoteproc框架管理。
安全认证:
STM32MP2系列:通过OP-TEE可信应用(TA)验证协处理器固件,确保完整性。
STM32MP15:可选通过TF-A或U-Boot认证。
3. 各系列差异
3.1 STM32MP13/15系列
FSBL:TF-A BL2。
SSBL:U-Boot。
协处理器:Cortex-M4(MP15)支持实时/低功耗任务。
安全启动:可选认证,支持信任链扩展。
3.2 STM32MP2系列
主核:Cortex-A35,启动时协处理器(Cortex-M33)保持复位。
安全架构:
OP-TEE:管理安全服务,隔离内存区域。
协处理器固件:可包含安全(TF-M)和非安全(STM32Cube)部分。
认证流程:通过OP-TEE TA验证Cortex-M33固件,确保运行时完整性。
4. 工具与配置
STM32CubeMX:配置启动组件(如时钟树、外设初始化)。
TF-A/U-Boot:开源引导程序,支持定制启动流程。
OP-TEE:提供安全执行环境(TEE),支持可信应用开发。
5. 典型问题解答
Q1: 如何选择启动设备?
A1: BootROM根据引脚状态(如BOOT0/1)或OTP配置选择启动源(eMMC、SD卡、UART等)。
Q2: 安全启动如何实现?
A2: BootROM验证FSBL签名,FSBL验证SSBL,逐级建立信任链。STM32MP2还可通过OP-TEE TA认证协处理器固件。
Q3: 协处理器何时启动?
A3: 可在SSBL阶段(快速启动)或Linux运行时(动态加载),通过remoteproc管理。
Q4: 如何优化启动时间?
A4: 减少SSBL功能(如禁用网络/USB)、提前启动协处理器、使用压缩内核镜像。
如需进一步探讨具体配置或安全实现细节,可提供更具体的问题方向。
https://wiki.st.com/stm32mpu/wiki/TF-A_overview
根据您提供的知识库内容,以下是关键信息整理及常见问题解答方向:
一、TF-A 引导流程要点
STM32MPU专用调整:
移除了BL1阶段(因STM32自带ROM Bootloader)
直接从BL2启动,负责加载安全/非安全镜像
AArch32架构下:BL2 → BL32(OP-TEE)→ BL33(U-Boot)
AArch64架构下:BL2 → BL31(EL3运行时)→ BL32/BL33
安全服务:
Armv7使用OP-TEE作为BL32,替代旧版SP_MIN
提供安全监控调用(SMC)和PSCI电源管理接口
设备树配置:
BL2/BL31阶段使用精简设备树
可通过STM32CubeMX工具配置
二、开发任务指南方向
1. 存储设备扩展
Yocto添加NAND闪存:
# 示例:修改Yocto层配置文件
MACHINE_FEATURES += "nand"
IMAGE_INSTALL_append = " mtd-utils"
需调整内核设备树,添加NAND控制器及分区表。
2. 显示驱动开发
低分辨率慢速接口驱动:
使用Linux DRM框架
实现struct drm_panel_funcs中的enable/disable时序控制
注意配置pixel-clock和display-timings节点
3. 性能优化
TensorFlow Lite硬件加速:
// 启用STM32 NPU Delegation
std::unique_ptr<tflite::TfLiteDelegate, decltype(&free)>
delegate(TfLiteNpuDelegateCreate(&options), free);
interpreter->ModifyGraphWithDelegate(delegate.get());
需在编译时启用--define tflite_with_stm32_npu=true
4. 系统配置
256MB DDR映射配置:
// 修改TF-A设备树内存节点
memory@c0000000 {
device_type = "memory";
reg = <0xc0000000 0x10000000>; // 起始地址0xC000_0000,大小256MB
};
三、调试技巧
STM32CubeIDE调试Cortex-M33:
创建STM32MP25xx_CM33目标配置
在Debug Configurations中启用Secure Debug模式
使用Semihosting输出调试日志
四、数据一致性管理
Cache与MMU协同:
// 使用MPU API维护缓存一致性
SCB_EnableICache();
SCB_EnableDCache();
HAL_MMU_ConfigRegion(DEVICE_nGnRnE); // 配置外设内存属性
如需具体某个问题的分步指南,请告知具体应用场景(如正在调试哪类外设或遇到何种报错),我将结合知识库给出详细方案。
基于两个STM32MPU知识库链接(Boot Chain Overview 和 TF-A Overview),以下是关键知识整合及常见问题解答方向:
1. STM32MPU启动流程核心阶段
阶段 组件 功能 安全角色
BootROM ROM代码 初始化基础硬件,选择启动设备(eMMC/SD/UART),加载FSBL到SRAM。 验证FSBL签名,信任链起点。
FSBL TF-A BL2 初始化DDR、时钟树,加载SSBL(U-Boot)到DDR。 可选验证SSBL,支持加密镜像。
SSBL U-Boot 初始化复杂外设(USB/以太网),加载内核和设备树。 可选验证内核/设备树,传递安全状态。
OS Kernel Linux/RTOS 启动用户空间,管理硬件资源。 非安全上下文运行。
协处理器 Cortex-M4/M33 实时任务处理(如电机控制),通过remoteproc或U-Boot bootaux启动。 STM32MP2需通过OP-TEE验证固件。
2. TF-A在STM32MPU中的关键作用
(1) 架构差异
STM32MP15(AArch32):
BL2 → BL32(OP-TEE) → BL33(U-Boot)
OP-TEE提供安全服务(如密钥存储)。
STM32MP2(AArch64):
BL2 → BL31(EL3运行时) → BL32/BL33
BL31管理安全监控(Secure Monitor)。
(2) 安全启动流程
BootROM 验证FSBL(BL2)的RSA签名。
BL2 验证BL32/BL33的哈希或签名。
BL32(OP-TEE) 验证协处理器固件(如STM32MP2的Cortex-M33固件)。
(3) 关键配置
# 启用加密镜像支持
STM32MP_USE_ENCRYPTED_BOOT = 1
# 选择BL32实现(OP-TEE或SP_MIN)
BL32 = optee
3. 常见问题解答
(1) 如何配置STM32MP15从UART启动?
硬件配置:设置BOOT引脚(BOOT0=1, BOOT1=0)。
TF-A修改:
// 修改plat/st/stm32mp1/stm32mp1_def.h
#define STM32MP_BOOT_DEVICE_UART 1
**使用STM32CubeProgrammer通过UART加载FSBL。
(2) 如何在U-Boot中启动协处理器?
加载固件到内存:
=> load mmc 0:1 0x48000000 m4_fw.elf
启动协处理器:
=> bootaux 0x48000000
验证状态:
=> rproc list
(3) 如何启用安全启动?
生成密钥:
openssl genrsa -out private.pem 2048
签名镜像:
tools/cert_create/cert_create -n --key private.pek --tb-fw BL2.bin
烧写密钥哈希到OTP:
stm32key -k public_key.bin -a write
4. 调试技巧
(1) TF-A日志调试
启用串口输出:
# 修改TF-A编译选项
DEBUG = 1
LOG_LEVEL = 40 # 最高详细级别
查看BL2日志:UART输出BL2初始化过程。
(2) 协处理器故障排查
检查内存映射:确保协处理器固件加载地址不冲突(如SRAM区域)。
验证固件格式:使用readelf -h m4_fw.elf检查ELF头是否有效。
5. 性能优化
(1) 缩短启动时间
禁用非必要功能:
# U-Boot配置中禁用网络/USB
# CONFIG_CMD_NET=n
# CONFIG_USB=n
启用压缩内核:
make zImage # 生成压缩内核镜像
总结
以上内容整合了STM32MPU启动链和TF-A的核心知识点,涵盖安全配置、协处理器管理及调试技巧。如需针对具体开发场景(如自定义BL2、优化启动流程)的逐步指南,请提供更详细的需求。
相关文章:
STM32MP1xx的启动流程
https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview 根据提供的知识库内容,以下是STM32 MPU启动链的详细解析: 1. 通用启动流程 STM32 MPU启动分为多阶段,逐步初始化外设和内存,并建立信任链: 1.1 ROM代码&…...
wgcloud-server端部署说明
Wgcloud 是一款开源的轻量级服务器监控系统,支持多平台,可对服务器的 CPU、内存、磁盘、网络等指标进行实时监控。 以下是 Wgcloud Server端的详细部署步骤: 环境准备 服务器: 至少准备两台服务器,一台作为监控端&a…...

大模型Agent:人工智能的崭新形态与未来愿景
在人工智能技术高歌猛进的当下,大模型 Agent 作为 AI 领域的关键研究方向,正日益彰显出其独有的魅力以及广阔无垠的应用前景。大模型 Agent 不但具备对环境的感知、自主的理解、决策的制定以及行动的执行能力,而且能够游刃有余地应对繁杂任务…...

专题二最大连续1的个数|||
1.题目 题目分析: 给一个数字k,可以把数组里的0改成1,但是只能改k次,然后该变得到的数组能找到最长的子串且都是1。 2.算法原理 这里不用真的把0变成1,因为改了比较麻烦,下次用就要改回成1,这…...
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
背景 最近在某客户的ORACLE开发环境(oracle 19.10)中,发现一个非常奇怪情况, 开发人员反馈,有一条SQL,查询了两个sum函数作为两个字段, select sum(c1),sum(c2) from ...当两个sum一起出现时,第一个sum的结果不对&am…...

2025国家护网HVV高频面试题总结来了03(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 0x1 高频面试题第一套 0x2 高频面试题第二套 0x3 高频面试题第三套 0x4高频面试题第四套 0x1 高频面试题…...

CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南20250302
CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南 引言 在 Linux 服务器操作系统领域,CentOS 和 Ubuntu 是广泛采用的发行版。它们在命令集、默认工具链及生态系统方面各有特点。本文深入剖析 CentOS 与 Ubuntu 在常用命令层面的异同,并结合实践案例…...

SQL命令详解之常用函数
目录 1 简介 2 字符串函数 2.1 字符串函数语法 2.2 字符串函数练习 3 数学函数 3.1 数学函数语法 3.2 数学函数练习 4 日期时间函数 4.1 日期时间函数语法 4.2 日期时间函数练习 5 条件函数 5.1 条件函数语法 5.2 条件函数练习 6 总结 1 简介 在SQL中我们经常会用…...

IndexError: index 0 is out of bounds for axis 1 with size 0
IndexError: index 0 is out of bounds for axis 1 with size 0 欢迎来到英杰社区,这里是博主英杰https://bbs.csdn.net/topics/617804998 报错原因 数组或数据结构为空 如果数组或 DataFrame 在指定的维度上没有任何元素(例如,没有列&#x…...

C++学习之C++初识、C++对C语言增强、对C语言扩展
一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 ,理解为打开一个房间,房间里有我们所需…...
k8s面试题总结(八)
1.K8s部署服务的时候,pod一直处于pending状态,无法部署,说明可能的原因 Node节点的资源不足,yaml文件资源限制中分配的内存,cpu资源太大,node宿主机资源没那么大,导致无法部署。部署pod的yaml文…...
《今日-AI-编程-人工智能日报》
一、AI行业动态 荣耀发布“荣耀阿尔法战略” 荣耀在“2025世界移动通信大会”上宣布,将从智能手机制造商转型为全球领先的AI终端生态公司,并计划未来五年投入100亿美元建设AI设备生态。荣耀展示了基于GUI的个人移动AI智能体,并推出多款AI终端…...

Koupleless 2024 年度报告 2025 规划展望
Koupleless 2024 年度报告 & 2025 规划展望 赵真灵 (花名:有济) Koupleless 负责人 蚂蚁集团技术专家 Koupleless 社区的开发和维护者,曾负责基于 K8s 的应用研发运维平台、Node/Pod 多级弹性伸缩与产品建设,当前主…...
C与C++中inline关键字的深入解析与使用指南
文章目录 引言一、历史背景与设计哲学1.1 C中的inline1.2 C中的inline 二、核心机制对比2.1 编译行为2.2 链接模型2.3 存储类说明符(详细解析)C的灵活组合C的限制原理 补充说明: 三、典型应用场景3.1 C中的使用场景3.2 C中的使用场景 四、现代…...

记录linux安装mysql后链接不上的解决方法
首先确保是否安装成功 systemctl status mysql 如果没有安装的话,执行命令安装 sudo apt install mysql-server 安装完成后,执行第一步检测是否成功。 通常初始是没有密码的,直接登陆 sudo mysql -u root 登录后执行以下命令修改密码&…...

Java 大视界 -- Java 大数据在智能金融反欺诈中的技术实现与案例分析(114)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
01_NLP基础之文本处理的基本方法
自然语言处理入门 自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域,主要目标是让机器能够理解和生成自然语言,这样人们可以通过语言与计算机进行更自然的互动。 …...

(十 六)趣学设计模式 之 责任链模式!
目录 一、 啥是责任链模式?二、 为什么要用责任链模式?三、 责任链模式的实现方式四、 责任链模式的优缺点五、 责任链模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...

动态规划/贪心算法
一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术,尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题,并保存这些子问题的解以避免重复计算,从而提高效率。 动态规划的核心思想 最优子结…...

PH热榜 | 2025-03-04
1. MGX 标语:第一支人工智能开发团队 介绍:MGX(MetaGPT X)是一个基于真实软件标准操作程序(SOP)的多代理人工智能平台。在这里,你可以随时与AI团队的领导、产品经理、架构师、工程师和数据分析…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...