STM32MP157学习笔记(二) ---- Linux系统启动

一、软件架构

STM32MPU嵌入式软件分布主要组件有:
1、在 Arm Cortex-A 上运行的 OpenSTLinux 发行版,包括:
    a)OpenSTLinux BSP,具有

        ★ 基于TF-A和U-Boot的引导链。
        ★ 在安全模式下在 Arm Cortex-A 上运行的 OP-TEE 安全操作系统。
        ★ 在非安全模式下在 Arm Cortex-A 上运行的 Linux 内核。
    b)应用程序框架由依赖于 BSP 并在 Linux 端提供 API 的中间件组成,以运行通常通过显示器、触摸屏等与用户交互的应用程序。

    c)在 OP-TEE 方面,可信应用程序 (TA) 依赖于 OP-TEE 内核进行秘密操作(在 Linux 和 STM32Cube MPU 包中不可见)

2、STM32Cube MPU 包在 Arm Cortex-M 上运行:它基于 HAL 驱动程序和中间件,与其他 STM32 微控制器一样,完成协处理器管理。

二、启动流程

STM32MP1 是面向 Linux 领域的,其启动 Linux 内核的流程如下:

STM32MP1 启动 linux 内核一共分为 5 个步骤,我们依次来看一下这
五个步骤的内容:
①、 ROM 代码
前面说了很多次了,这是 ST 自己编写的代码,在 STM32MP1 出厂的时候就已经烧写进去
的,不能被修改的。 ROM 代码因为保存在 STM32 内部 ROM 里面,因此也就直接简单明了的
叫做“ROM 代码”了。它是处理器上电以后首先执行的程序, ROM 代码的主要工作就是读取
STM32MP1 的 BOOT 引脚电平,然后根据电平判断当前启动设备,最后从选定的启动设备里面
读取 FSBL 代码,并将 FSBL 代码放到对应的 RAM 空间。
现在很多产品对设备上运行的应用都提出了安全要求,从图 5.5.1 中可以看出, STM32MP1
启动 Linux 内核的过程是一个链式结构: ROM Code→FSBL→SSBL→Linux kernel→rootfs,系
统启动的过程中要保证整个链式结构都是安全的。 ROM 代码作为第一链,首先要对 FSBL 代码
进行鉴权,同样的, FSBL 以及后面的每一链都要对下一个阶段的镜像进行鉴权,直到设备系统
正确启动。
②、 FSBL
FSBL 代码初始化时钟树、初始化外部 RAM 控制器,也就是 DDR。最终 FSBL 将 SSBL 加
载到 DDR 里面并运行 SSBL 代码。
一般 FSBL 代码是 TF-A 或者 Uboot 的 SPL 代码,前面我们说了,也可以将 FSBL 换成我们自

己编写的 STM32MP1 A7 内核裸机代码。

③、 SSBL

由于 SSBL 代码运行在 DDR 里面,无需担心空间不够,因此 SSBL 代码的功能就可以做的
很全面,比如使能 USB、网络、显示等等。这样我们就可以在 SSBL 中灵活的加载 linux 内核,
比如从 Flash 设备上读取,或者通过网络下载下载等,用户使用起来也非常的友好。 SSBL 一般
是 Uboot,用来启动 Linux 内核。
③、 Linux 内核
SSBL 部分的 Uboot 就一个使命,启动 Linux 内核, Uboot 会将 Linux 内核加载到 DDR 上
并运行。 Linux 内核启动过程中会初始化板子上的各种外设。
④、 Linux 用户空间
系统启动的时候会通过 init 进程切换到用户空间,在这个过程中会初始化根文件系统里面
的各种框架以及服务。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MacLodge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值