系统移植(三)u-boot移植 ① 相关概念

文章目录

  • 一、u-boot概念
    • (一)概念
    • (二)获取u-boot源码
      • 1.从u-boot官网获取
      • 2. 从 STM官网
      • 3. 开发板厂商获取
    • (三)分析u-boot源码
      • 1. u-boot源码的目录结构
      • 2. 获取make的帮助信息
      • 3. 分析README文件
    • (四)安全启动流程和非安全启动流程的区别
      • 1. Flash分区信息
      • 2. linux系统的启动流程
      • 3. 安全启动流程
      • 4. 非安全启动流程

一、u-boot概念

(一)概念

BootLoader:引导程序的统称,u-boot属于BootLoader中的一种。
u-boot:通用的引导程序

u-boot是一个开源的引导程序
u-boot支持多种不同的架构平台
u-boot支持多种不同芯片厂商的处理器
u-boot在启动过程中会完成部分必要硬件的初始化操作,比如串口,网卡,内存等
u-boot本质就是一个相对复杂的裸机程序
u-boot一旦完成内核的引导加载启动之后,u-boot就结束了。

  • 补充:
    开发板:FSMP1A
    处理器(SOC/MPU):STM32MP157AAA
    内核:ARM Cortex-A7核
    架构:ARM-v7架构
  • 芯片厂商每生产一款处理器之后,都需要将这款处理器的适配的代码添加到u-boot源码和linux内核源码中。
  • 芯片厂商每生成一款芯片都会基于这块芯片设计出对应的参考板(公板),芯片使用的厂商,根据公板进行硬件的裁剪,设计出适合自己公司产品的硬件。软件工程师再根据硬件的不同,进行软件的裁剪,让软件适配自己的开发板即可。

(二)获取u-boot源码

1.从u-boot官网获取

u-boot官网网址:https://ftp.denx.de/pub/u-boot/

u-boot版本的命名方式:

 u-boot-2021.07-rcX.tar.bz2 |	 |   |	|     |---> 压缩格式|	 |   |	|---> 带rc:测试版   不带rc:稳定版|	 |	 |---> 月份|	 |---> 年份|---> u-boot名字

2. 从 STM官网

wiki网址:
https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP1_Developer_Package

https://www.st.com/en/embedded-software/stm32mp1dev.html#get-software
从ST的官方下载的源码,一定已经支持了对应的STM32mp157a。

3. 开发板厂商获取

开发板厂商提供的u-boot源码一定已经支持你所购买的开发板

(三)分析u-boot源码

1. u-boot源码的目录结构

目录:分类管理文件的,每个目录的名字都有其特定的含义。

api —> api接口
arch —> 架构相关的代码(需要关注,但是不需要修改)
board —> 板子相关的代码(需要关注,但是不需要修改)
cmd —> u-boot命令相关的代码
common —> 微架构依赖代码
configs —> 板子的默认配置文件(需要关闭,需要修改)
disk —> flash相关代码
doc —> 文档
drivers —> 驱动代码(需要关注,需要修改)
dts —> 设备树文件(需要关注)
env —> 环境相关代码
examples —> 案例代码
fs —> 文件系统相关代码
include —> 头文件
Kconfig —> 配置文件(需要关注)
lib —> 库
Makefile —> 配置和编译u-boot源码(需要关注)
net —> 网络相关代码
post —> 电源相关代码
README —> 帮助文件
scripts —> 脚本文件
test —> 测试代码
tools —> 工具命令

2. 获取make的帮助信息

在这里插入图片描述

  • 补 :Makefile文件中的规则构成:
目标:依赖(tab键)命令
  • make 目标 : 默认找目标对应的规则,解析依赖关系是否成立,如果成立则执行对应的命令,
    如果不成立,则继续解析其它的规则,直到依赖关系成立。

清除目标:
make clean
make mrproper
make distclean

配置目标:
make menuconfig —> 基于菜单选项的图形化界面配置
在这里插入图片描述
编译目标:
make -j4 all —> -j4 :4个线程编译

3. 分析README文件

在这里插入图片描述
所有支持的板子都有一个默认的配置文件,
执行make <board_name>_defconfig进行配置

打开arch/…/configs/目录,查找符合stm32mp157a芯片的配置文件名
stm32mp15_basic_defconfig —> 非安全启动对应的板子默认配置文件
stm32mp15_trusted_defconfig —> 安全启动对应的板子的默认配置文件

(四)安全启动流程和非安全启动流程的区别

1. Flash分区信息

在这里插入图片描述

2. linux系统的启动流程

在这里插入图片描述

  • 注:
  • TF-A提供了一组安全和可信任的软件组件,用于引导和初始化系统。
  • SPL,全称为Second Program Loader,它的主要功能是负责装载操作系统到RAM中,并提供了一些系统命令。

首先,从系统上电开始,芯片内部的ROM会执行一段固化代码(ROM Code),这通常是由芯片厂商在出厂时预置的,主要用于进行基本的时钟树初始化,确保系统能够进入下一个启动阶段。这一阶段被称为First Stage,由于它完全依赖于芯片内部的资源,因此通常受到严格的内存限制(如小于128kB)。

接下来,系统进入Second Stage,也就是从启动设备(如存储器或串口)加载第一级启动加载程序(FSBL)。FSBL的主要任务是完成更复杂的初始化工作,如初始化外部RAM(如DDR、LpDDR)控制器,为后续的启动过程准备足够的内存资源。由于这一阶段的代码量相对较大,因此通常需要从外部存储设备加载,但仍然受到内存大小的限制(如小于256kB)。

在FSBL之后,系统通常会加载Boot Loader,如u-boot或TF-A(Trusted Firmware-A)的SPL(Second Program Loader)部分。Boot Loader负责显示开机画面(boot loader splash screen),并从存储器或以太网等启动设备加载Linux内核镜像(image)以及设备树(device tree)等必要信息。这些信息是Linux内核启动和初始化所必需的。

随着Linux内核的加载和初始化(包括平台驱动等的加载),系统进入Linux user space阶段。在这一阶段,Linux内核会挂载根文件系统(rootfs),并加载用户空间初始化进程(如/sbin/init),这是用户空间服务和应用程序得以运行的基础。

最后,随着用户空间初始化进程的启动,Linux系统完成启动过程,进入稳定运行状态。整个启动过程是一个多级流程,每个步骤都依赖于前一个步骤的结果,且每个步骤都有其特定的功能和任务。通过这一流程,Linux系统能够安全、可靠地从启动设备加载并运行。通过这一流程,Linux系统能够安全、可靠地从启动设备加载并运行。
在这里插入图片描述

  • 注:secure Monitor,即安全监视器,是ARM架构中的一个关键组件,Secure Monitor是一个运行在高特权级别的软件组件,它负责在系统的安全世界(Secure World)和正常世界(Non-secure World,或称Normal World)之间提供切换和交互的接口

3. 安全启动流程

在这里插入图片描述

4. 非安全启动流程

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

讨逆猴子剪切板,浏览器复制失败?

讨逆猴子剪切板&#xff0c;复制失败&#xff1f; 问题&#xff1a;本地开发情况下可以直接复制&#xff0c;公网就不行了…触发了安全机制。 const link 内容;navigator.clipboard.writeText(link);报错&#xff1a; 解决方案&#xff1a; if (navigator.clipboard &&…

使用代理IP进行本地SEO优化:如何吸引附近的客户?

在今天竞争激烈的互联网时代&#xff0c;如何利用代理IP进行本地SEO优化并吸引附近的客户已经成为许多企业和网站面临的关键挑战。本文将探讨使用代理IP的策略和技巧&#xff0c;以帮助公司提高在本地市场的可见性和吸引力&#xff0c;从而扩大本地客户群体。 1. 代理IP在本地…

Windosw下Visual Studio2022编译FFmpeg(支持x264、x265、fdk-acc)

FFmpeg 7.0 版本移除了 6.0 之前已弃用的 API&#xff0c;无法向下兼容。所以编译的版本选择FFmpeg 6.1.1。 一、安装Visual Studio2022 可参考另外一篇文章&#xff1a;Windows安装Visual Studio2022 QT5.15开发环境_qt5.15.2 vs2022-CSDN博客 二、安装MSYS2 下载地址&…

lua 游戏架构 之 游戏 AI (四)ai_autofight_find_target

定义一个名为 ai_autofight_find_target 的类&#xff0c;继承自 ai_base 类。 lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客文章浏览阅读237次。定义了一套接口和属性&#xff0c;可以基于这个基础类派生出具有特定行为的AI组件。例如&#xff0c;可…

大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Docker+consul容器服务的更新与发现

1、Consul概述 &#xff08;1&#xff09;什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点…

Spark实时(三):Structured Streaming入门案例

文章目录 Structured Streaming入门案例 一、Scala代码如下 二、Java 代码如下 三、以上代码注意点如下 Structured Streaming入门案例 我们使用Structured Streaming来监控socket数据统计WordCount。这里我们使用Spark版本为3.4.3版本&#xff0c;首先在Maven pom文件中导…

在 Spring Boot 中使用 Filters 实现请求过滤和预处理

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 什么是过滤器 过滤器&#xff08;Filter&#xff09;是一种在Web应用中用于拦截和处理HTTP请求和响应的对象。 在Java Web开发中&#xff0c;过滤器是实现特定功能&#xff0c;如认证、日志记录和字符编码处…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github&#xff1a;X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内&#xff0c;运行下面内容 依赖文件系统环境运行环…

MyBatisPlus复习

目录 自定义sql swagger工具 IService批量新增 代码生成器 DB静态工具&#xff0c;hutool工具 逻辑删除 枚举处理器 Json处理器 分页 自定义sql swagger工具 IService批量新增 代码生成器 DB静态工具&#xff0c;hutool工具 逻辑删除 枚举处理器 Json处理器 分页

ks滑块验证码逆向分析与python识别

文章目录 1. 写在前面3. 接口分析3. 算法实现 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

大模型技术:发展历程、经典模型、微调与应用[更新中...]

文章目录 一、预训练语言模型发展历程二、经典的Pre-trained任务2.1 Masked Language Modeling2.2 Next Sentence Prediction 三、Task-specific Fine-tuning 任务3.1 Single-text Classification (单句分类)3.2 Sentence-pair Classification (句子匹配/成对分类)3.3 Span Tex…

谷粒商城实战笔记-71-商品服务-API-属性分组-前端组件抽取父子组件交互

文章目录 一&#xff0c;一次性创建所有的菜单二&#xff0c;开发属性分组界面1&#xff0c;左侧三级分类树形组件2&#xff0c;右侧分组列表3&#xff0c;左右两部分通信3.1 子组件发送数据3.2&#xff0c;父组件接收数据 Vue的父子组件通信父组件向子组件传递数据子组件向父组…

【BUG】已解决:The above exception was the direct cause of the following exception:

The above exception was the direct cause of the following exception: 目录 The above exception was the direct cause of the following exception: 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c…

【杰理蓝牙开发】AC695x 音频部分

本文主要记录 杰理蓝牙audio接口的使用&#xff0c;包括ADC和DAC原理的介绍和API接口的使用。 【杰理蓝牙开发】AC695x 音频部分 0. 个人简介 && 授权须知1. ADC【音频数据采集】硬件部分1.1 单片机引脚1.2 硬件电路设计1.3 MIC 输入通路解释 2. 【DAC】音频信号编解码…

Super 4PCS配准算法

Nicolas Mellado&#xff0c;CNRS&#xff08;Centre national de la recherche scientifique&#xff0c;法国国家科学研究中心&#xff09;的研究员&#xff0c;在IRIT&#xff08;Institut de Recherche en Informatique de Toulouse&#xff0c;图卢兹计算机科学研究所&…

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中&#xff0c;Fragments 是一种轻量级的 UI 组件&#xff0c;类似于视图&#xff08;Views&#xff09;&#xff0c;但它们没有自己的控制器&#xff08;Controller&#xff09;。Fragments 通常用于定义可以在多个视图中重用的 UI 片段&#xff0c;从而提…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…

如何录制电脑内部声音?全方位介绍电脑录音软件:8款在线录音!(2024重新整理)

如何录制电脑内部声音&#xff1f;不管是娱乐圈还是现实生活&#xff0c;【录音】这个功能的重要性不言而喻。而电脑录音已在影视配音、音视频剪辑、会议记录、在线教育等多个领域发光发热&#xff01; 本文将为您推荐8款电脑录音软件&#xff0c;并详细介绍电脑录音的多种方式…

Python番外篇:变量是盒子还是标签

引言 前面通过几十篇文章&#xff0c;大概把Python的一些比较实用的基础做了一些介绍&#xff0c;学会这些&#xff0c;基本能应付日常的小的需求开发了&#xff0c;写一些小工具&#xff0c;提高工作的处理效率。 接下来&#xff0c;准备开始进入一个新的篇章&#xff0c;也…