Linux启动流程之一

本文详细介绍了STM32嵌入式Linux启动过程,包括固化的BootROM、分段的Bootloader(FSBL和SSBL),以及它们在初始化硬件、加载内核和提供灵活加载选项中的作用。特别提到了TF-A在FSBL中的应用和SSBL的更全面功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

        常规来说嵌入式linux启动过程是这样的:内部BootROM --> BootLoader --> kernel --> rootfs,在这四部分中,BootROM是固化在芯片中的,后面三个流程分别对应linux三大件,而在STM32中,并无太大改变,仅是将bootloader分为了FSBL和SSBL两部分。

模块BootRom

        这个模块是由厂商固化在芯片中的,用户是无法改变的。它的作用呢也很明确,它是上电后第一个运行的代码,任务是判断启动模式,据启动模式将存储器中bootloader的全部或部分代码搬运到片内sram中去,然后跳转执行。sram很小,一般无法将bootloader全部加载。

        这个阶段中,所有的外设及外围模块都没有工作。

bootloader

       顾名思义这段代码的作用是用引导系统启动的,它是芯片运行的由用户编写的第一块代码。在不同的芯片上会有所差异,但其根本作用是没有变的。bootloader负责初始化板子的基本外设和部分外围器件。它的主要功能有以下几项:

        1、读取和校验启动设备上的引导加载程序,通常是FLASH设备。

        2、初始化硬件,包括CPU、内存、硬盘、显卡等。

        3、读取并加载内核文件到内存中去。

        4、初始化操作系统的运行环境,包括设置内存管理、文件系统、网络、进程理管等。

        5、启程操作系统的主程序,通常是操作系统的内核。

        在这里ST官方把它分为了两部分,第一部分FSBL的作用主要为初始化CPU、内存,并校验后续程序的安全性;加载第二段引导程序;第二部分的SSBL采用的是uboot,它引导系统内核启动。

FSBL (First Stage Boot Loader)

        FSBL是运行在内部ram中的,空间比较有限,所以在FSBL的代码里可以做的功能都比较少,它主要做引导加载SSBL所必须的工作。

        这里FSBL段ST使用了TF-A(Arm Trusted Firmware,有些资料也叫ATF),TF-A会先初始化DDR等外设(时钟树、外部RAM控制器,就是DDR),然后把Uboot从Flash(NAND,NOR FLASH , SD, MMC等)拷贝到DDR中。启动uboot代码。

SSBL(Second Stage Boot Loader)

        SSBL运行在DDR里面,不用担心空间不够的问题。所以,SSBL代码的功能就可以做的很全面。那么Linux内核的加载就灵活多了,比如从Flash设备上读取,比如从网络上读取。也就是说内核的更新可以在这里实现。SSBL一般使用uboot来做。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值