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团队的领导、产品经理、架构师、工程师和数据分析…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...