[嵌入式Linux]—STM32MP1启动流程

STM32MP1启动流程

1.启动模式

STM32MP1等SOC支持从多种设备中启动,如EMMC、SD、NAND、NOR、USB、UART等。其中USB、UART是作为烧录进行启动的。

STM32MP1内部ROM中存储有一段出厂代码来进行判断从哪种设备中启动,上电后这段代码会被执行,这段代码空间不开放给用户。

在这里插入图片描述

这段代码通过判断MP1中BOOT0~BOOT2这三个引脚的高低电平来判断在哪种设备启动,硬件原理图可参考如下。SOC也可以遍历各个启动设备,如果有则在该设备中启动,则可以省掉该部分电路。

在这里插入图片描述

MP1引脚电平对应启动设备如下:

在这里插入图片描述

MP1引脚可进行复用,BOOT引脚也可以进行复用。在出厂ROM中的代码已经设定好启动引脚,如果想修改启动引脚,则需要修改OTP,因此不建议复用BOOT引脚。

什么是OTP?

在嵌入式系统中,OTPOne-Time Programmable)是一种重要的存储技术。它通常用于存储固件、配置信息或密钥等数据,其主要特点是:

  1. 一次性可编程
  • 定义:OTP 存储器只能在制造后进行一次编程,数据一旦写入便无法更改或删除。这与可擦除可编程只读存储器(EEPROM)或闪存(Flash)不同,后者可以多次写入和擦除。
  1. 应用领域
  • 固件存储:在某些嵌入式设备中,OTP 被用来存储设备的固件或初始配置。这些数据在出厂时被写入,之后不会被修改。
  • 安全性:OTP 存储器常用于存储加密密钥、设备身份等敏感信息。由于其数据不可更改,增加了数据的安全性,降低了被篡改的风险。
  • 电子产品:许多消费电子、汽车电子和工业设备中广泛使用 OTP 存储器来实现安全认证和数据保护。
  1. 物理特性
  • 制造过程:OTP 存储器通常在半导体制造过程中被编程。它的设计允许在生产时写入数据,之后的任何操作都不会改变这些数据。
  • 成本效益:与其他可重复编程存储器相比,OTP 存储器的成本通常较低,因为它的结构更简单,不需要复杂的擦除和重写机制。
  1. 优势与劣势
  • 优势
    • 数据安全性高:一旦写入,数据不可篡改。
    • 成本低:相对于其他类型的存储器,其制造和使用成本通常更低。
  • 劣势
    • 数据不可更改:一旦数据写入,无法修改,限制了其灵活性。
    • 写入过程不可逆:写入失败会导致数据丢失,无法恢复。
  1. 与其他存储技术的比较
  • EEPROM 和 Flash 存储:这些存储器可以多次写入和擦除,适合需要频繁更新的数据存储。相对而言,OTP 更适合用于静态数据。

总结

OTP 存储器在嵌入式系统中扮演着重要角色,尤其是在需要高安全性和低成本的应用场景。尽管它的灵活性较差,但在许多情况下,无法更改的数据特性使其成为一个理想的选择。

2.启动流程

2.1 功能介绍

MP1启动后首先会执行保存在ROM中的一段代码来判断从哪种设备启动,除此之外,该代码还有其它功能:

  1. Secure boot :安全启动,即一般的启动模式。
  2. Engineering boot :可通过STLINK访问A7或M4内核。一般通过该方法调试M4内核。
  3. Secondary core boot :用于配置第二个内核启动。启动后,MP1双核A7实际上只有一个核Core0在运行ROM程序,另一个核Core1在执行死循环,只用Core1接收到Core0发送的信号后才回运行。如果不进行第二个核启动,则可认为是单核设备。
  4. RMA boot :全称为Return Merchandise Authorization Boot,是一种与设备保修和维护相关的启动机制,主要用于嵌入式系统和网络设备。这种机制允许设备在返回制造商或维修中心时以特定方式启动,以便进行故障排除、修复或恢复。
  5. 低功耗唤醒 。
  6. 提供安全相关服务 。

2.2 启动流程

内部ROM流程图如下所示:

在这里插入图片描述

主要流程如下:

  1. 是不是CPU0运行?
  2. 检查复位原因。
  3. 是否是因为Standby导致的退出?
  4. 是否为RMA启动?
  5. 是否为ENGI启动?
  6. 进行冷启动,在flash中载入系统并进行鉴权。

2.3 安全启动

FSBL: 全称为 First stage boot loader,也就是第一阶段启动文件。
SSBL: 全称为 Second stage boot loader,也就是第二阶段启动文件 。

在MP1选定外部启动设备宏,则进入安全启动流程,基本步骤如下:

  1. 在flash中载入FSBL镜像文件,对于MP1来说,一般为TF-A。
  2. 对FSBL加载的镜像进行鉴权(此时DDR未初始化没在MP1内部RAM中运行)。
  3. 如果鉴权成功,则运行FSBL中固件。

2.4 串行启动

当从USB或UART启动时会进入该模式,ROM中的代码会循环扫描可以启动的UART或USB OTG接口,当扫描到一个活动的端口后或MP1便选定该端口,忽略掉其它设备。

  • USB启动

ROM内部代码支持USB OTG启动。需注意ROM中的晶振频率已经设置,要是修改需要修改OTP。

  • UART启动

约定的串口模式为串口工作模式为: 1 位起始位、 8 位数据位、偶校验、 1 位停止位、波特率 115200。

启动的UART也已经约定好,需保持与ROM中一致。

3.Flash设备启动要求

Linux系统不像MCU,编译完成通过只有一个bin文件烧录即可。

Linux编译出来为一个镜像文件,还需要其它代码来进行辅助,传统Linux需要三部分:uboot、kernel、rootfs。

对于MP1来说,还需要TF-A、TEE、vendorfs等。

以上所有文件组成最终的系统镜像,将镜像烧录到Flash中,根据不同的文件类型,则放置到Flash中不同的位置。MP1官方建议的位置如下:

在这里插入图片描述

EMMC和NAND Flash的主要区别是什么?

NAND Flash需要外部控制器来控制其读写操作,而eMMC则采用内置控制器,可以更加方便地实现读写操作和数据管理。此外,eMMC还可以作为内置存储器使用,由于其内置控制器的作用,可以实现快速的读写操作。

4.头文件信息

ROM启动时会先读取FSBL代码,一般是TF-A或者uboot的SPL。但是编译生成的二进制不能直接用,需要加入一段头部信息,其中包含全部鉴权内容。具体格式如下:

在这里插入图片描述

5.启动过程

MP1启动Linux流程如下:

在这里插入图片描述

  • 系统启动为一个链式结构:ROM Code -> FSBL -> SSBL -> Linux kernel -> rootfs。FSBL及其后面每一个环节都对镜像进行鉴权,指导设备正确启动。
  • FSBL中初始化时钟树、外部RAM控制器(即DDR),在内部RAM中运行;SSBL中代码运行在DDR中,完成的功能更为丰富。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556811.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CPU中的寄存器是什么以及它的工作原理是什么?

在计算机科学中,寄存器是数字设备中的一个重要组成部分,它用于存储数据和指令以快速处理。寄存器充当临时存储区,信息可以在这里被快速访问和操作,以执行复杂任务。寄存器是计算机中最基础的存储类型,它们在帮助机器高…

【Unity】版本不一致且未升级资产,导致 Unity Sprite 2D 动画播放错误

自己的 Unity版本是 2022.3.45f1。目前折腾的这插件 2D Action RPG Engine: Mythril2D ,推荐使用的 Unity 版本是 2021.3.18。 倒腾了这个 unity animation 动画半天,发现这个 animation sprite resolver 在导入动画帧的时候,一直都导入的是…

allegro 替换过孔

操作步骤如下 1.选择操作对象(需要替换的过孔),右键–>Repace……–>Selected…… 2.在弹出的窗口中选择最终需要的过孔既可以

【Matlab学习日记】② 常用滤波以及噪声分析方法(上)

关注星标公众号,不错过精彩内容 作者 | 量子君 微信公众号 | 极客工作室 【Matlab学习日记】专栏目录 第一章 ① Sinmulink自动代码生成教程 第二章 ② 常用滤波以及噪声分析方法(上) 文章目录 前言一、使用滤波的目的二、常见的几种噪声和表…

算法闭关修炼百题计划(四)

仅供个人复习 1.两数相加2.寻找峰值3.寻找旋转排序数组中的最小值4.寻找旋转排序数组中的最小值II5.搜索旋转排序数组6.岛屿的最大面积7.最大数8.会议室9.最长连续序列 1.两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储…

STM32 通用同步/异步通信

一、串行通信简介 CPU与外围设备之间的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。STM32单片机提供了功能强大的串行通信模块,即通用同步/异步收发器(USART)。 1.串行通信 串行通信是数据字节一位一位地依次传送的通信方式。…

毕业设计 深度学习水果识别

文章目录 1 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果 1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果…

毕业设计——医院信息化系统原型设计

作品详情 主要功能: 信息化系统是以患者为中心,服务于重症科室医务人员,提高工作效率及医疗服务质量。软件主要包含了重症医学临床管理系统和中央监控站,重症医学临床管理系统主要实现患者床位总览、患者护理、医嘱管理、数据字典…

JS 介绍/书写位置/输入输出语法

目录 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS 的组成 2. JS 书写位置 2.1 内部 JS 2.2 外部 JS 2.3 内联 JS 3. JS 注释和结束符 4. JS 输入输出语法 4.1 输入语法 4.2 输入语句 4.3 执行顺序 5. 字面量 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS …

GOM引擎启动后M2提示Invalid filename报错的解决办法

在架设一个GOM引擎版本的时候,启动M2就提示Invalid filename,之后的网关就没有办法再启动了,研究了半天也终于是弄好了,其实也简单,就是路径设置的不对,所以无法完成启动,很多人以为在控制台设置…

国庆节刷题

10.1 C语言 10.1 C 10.2 C语言 10.2 C 10.3 C语言 10.3 C 10.4 C语言 10.4 C 10.5 C语言 10.5 C 10.6 C语言 10.6 C

如何写出Pythonic的代码?

f-string、三元操作、各种解析式、生成器装饰器的熟练运用,“内库”引用和函数封装再加持PEP8,撰写的脚本不pythonic都难。😎 (笔记模板由python脚本于2024年10月07日 18:03:27创建,本篇笔记适合特别喜欢python的coder翻阅) 【学习…

手机号归属地查询-手机号归属地-手机号归属地-运营商归属地查询-手机号码归属地查询手机号归属地-运营商归属地

手机号归属地查询API接口是一种网络服务接口,允许开发者通过编程方式查询手机号码的注册地信息。关于快证签API接口提供的手机号归属地查询服务,以下是一些关键信息: 一、快证签API接口简介 快证签API接口可能是一个提供多种验证和查询服务…

Burp Suite为何能抓到HTTPS的明文流量,Wireshark可以吗,公司电脑的加密流量也是被监控了吗?

在前期博文《万字图文详解HTTPS协议通信过程,结合抓包实战解析带你一次看透HTTPS!》中,我们知悉HTTPS通信内容是用会话密钥加密的,但不少细心的读者存在疑问:为何对于使用HTTPS协议的站点,在Burp Suite中拦…

Excel-查找和引用数据-VLOOKUP 和 HLOOKUP 函数

在 Excel 中,VLOOKUP 和 HLOOKUP 是用于查找和引用数据的函数。下面是它们的基本用法: VLOOKUP 用途:在表格的第一列中查找某个值,并返回该值所在行的指定列中的数据。 语法: VLOOKUP(lookup_value, table_array, …

helm 测试卸载或删除(redis)

作者:程序那点事儿 日期:2024/02/07 18:30 查看redis 集群实例 kubectl get all -n redis 卸载集群实例 helm uninstall redis -n redis 删除pvc kubectl get pvc -n redis kubectl delete pvc redis-data-redis-master-0 redis-data-redis-replicas…

【Kubernetes】常见面试题汇总(五十九)

目录 129.问题:pod 使用 PV 后,无法访问其内容? 130.查看节点状态失败? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二&#xf…

Spring Cloud Netflix Ribbon 负载均衡详解和案例示范

1. 引言 在传统的集中式架构中,负载均衡器一般是放置在服务器端的,例如 Nginx等。随着微服务架构的兴起,服务实例的数量和部署地点变得更加动态和分布式,这使得在客户端进行负载均衡成为了一种可行且更灵活的方案。Netflix Ribbo…

Thinkphp/Laravel基于vue的金融理财产品销售系统设计与实现Vscode毕业设计成品源码.

目录 技术栈和环境说明具体实现截图设计思路关键技术课题的重点和难点:框架介绍数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 技术栈和环境说明 采用PHP语言开发,开发环境为phpstudy 开发工具notepad并使用MYSQL数据库…

攻防世界 告诉你个秘密

前言:做题笔记。 下载 挺懵是不是。 仔细看,数字组合居多 字母不超过E 大概可以猜测这是16进制。 一开始以为是16进制转2进制的莫斯,但,,并不是。 试着将16进制转成ASCII字符。 别的不说,base64 老客户了…