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

一、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. 非安全启动流程

在这里插入图片描述

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值