系统移植(三)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,一经查实,立即删除!

相关文章

Spark核心知识要点(二)

1、Spark有哪两种算子&#xff1f; Transformation&#xff08;转化&#xff09;算子和Action&#xff08;执行&#xff09;算子。 2、Spark有哪些聚合类的算子,我们应该尽量避免什么类型的算子&#xff1f; 在我们的开发过程中&#xff0c;能避免则尽可能避免使用reduceByK…

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

讨逆猴子剪切板&#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在本地…

java算法实现-1

1. 算法编程 1&#xff1a;请编写Java代码实现实现以下逻辑与输出 &#xff1f; 题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第四个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c…

JAVA通过实体类注解生成测试数据

注解 package cn.ac.iscas.utils;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** 注解用于生成测试数据*/ Retention(RetentionPolicy.RUNTIME) T…

SpringBoot 调用外部接口的三种方式

1. 简介 SpringBoot 简化了Spring应用的搭建和开发&#xff0c;支持访问外部模块接口或URL。需求场景 如apaas开发中封装接口调用外部服务。 2. 方式一&#xff1a;使用原始httpClient请求 实现 通过get方式获取参数&#xff0c;发起流程。关键代码 将数据转换为JSON格式。使…

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;可…

nfs、web与dns结合练习

1.搭建一个nfs服务器&#xff0c;客户端可以从该服务器的/share目录上传并下载文件 #服务端 1. 下载rpcbind和nfs-utils [root128 ~]# yum install rpcbind [root128 ~]# yum install nfs-utils2. 创建共享目录 [root128 ~]# mkdir /share3.编辑配置 [root128 ~]# vim /etc/ex…

大数据-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的父子组件通信父组件向子组件传递数据子组件向父组…

vector的相关内容介绍及模拟实现

一.内容介绍 1.vector是一个模板&#xff0c;不支持流插入和流提取&#xff0c;因为它支持多种方式的输出&#xff0c;不需要局限于流提取的方式 2.关于vector所涉及的函数接口与string类的用法类似&#xff0c;有兴趣可参考小编的另一篇博客 3.vector的迭代器失效问题 1&g…

后端面试题日常练-day08 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备&#xff0c;答案在文末 Java中的静态变量和实例变量有何区别&#xff1f; a) 静态变量属于类&#xff0c;实例变量属于对象 b) 静态变量只能在静态方法中访问&#xff0c;实例变量只能在实例方法中访问 c) 静态变量在类加载时…