点击上方蓝字【囧囧妹】一起学习,一起成长!
一、SBL概述
辅助引导加载程序 (SBL) 设置 PLL 时钟、打开 I/O 外设电源、初始化 DDR、将应用程序映像加载到 DDR 并使适用 SOC 的从内核退出复位。
》引导模式
MMC SD
MMC SD 引导加载程序需要使用包含引导加载程序和应用程序映像的 SD 卡引导目标。当电路板通电时,ROM 引导加载程序检测 MMC SD 引导加载程序映像并将其加载到内部存储器。引导加载程序初始化电路板,将应用程序映像从 SD 卡复制到 DDR 存储器,并将控制权交给应用程序。
OSPI
与 OSPI 接口的闪存设备使用 OSPI 引导加载程序和应用程序映像进行闪存。当电路板通电时,ROM 引导加载程序会检测来自闪存设备的引导加载程序映像并将其加载到内部存储器。Bootloader 初始化电路板,将应用程序映像从 OSPI 设备复制到 DDR 存储器,并将控制权交给应用程序。
UART
串行连接用于通过 XMODEM 协议将引导加载程序二进制文件从 PC 传输到目标板。执行时的引导加载程序提示应用程序映像通过 XMODEM 传输。在提供路径后,应用程序二进制文件通过串行连接传输到 DDR 内存,并将控制权传递给应用程序执行。
二、J721E SBL
<PDK>/packages/ti/build : 用于构建基础设施
<PDK>/packages/ti/csl : 用于初始化和 SoC 地址
<PDK>/packages/ti/board : 用于板和用例特定的初始化
<PDK>/packages/ti/drv/spi :用于从 OSPI 闪存读取应用程序
<PDK>/packages/ti/drv/udma :用于使用 DMA 从引导媒体读取数据
<PDK>/packages/ti/drv/mmcsd :用于从 MMC/SD/eMMC 读取应用程序
<PDK>/packages/ti/fs/fatfs : 用于从 MMC/SD/eMMC 读取文件
<PDK>/packages/ti/drv/sciclient : 用于与 DMSC 子系统通信
<PDK>/packages/ti/drv/uart :用于日志消息
<PDK>/packages/ti/osal : ti/drv 组件所需的原语
上电复位
ROM 引导加载程序 (RBL)
Jacinto ROM 存储器中预编程的软件开始执行。
RBL 执行平台配置和初始化。
然后它检查 sysboot 引脚并选择启动设备。
然后,RBL 为 R5 配置 PLL 和时钟设置,以及 eMMC、SD/MMC、OSPI、UART、PCIe、以太网等启动媒体,以实现可靠启动。
如果在引导设备上没有找到有效的引导加载程序,RBL 根据系统引导引脚检查下一个引导设备。
然后,它通过检查作为引导加载程序映像一部分的 X.509 证书来获取映像大小和加载地址。
然后,RBL验证、可选地解密二进制文件并将其加载到X.509证书中指定的加载地址处的内部存储器。
最后,它重置 R5 并将控制权传递给在 R5 上运行的辅助引导加载程序 (SBL)。
辅助引导加载程序 (SBL)
用户级辅助引导加载程序 (SBL) 从内部存储器开始执行。它启用 ATCM,启动 PMU 计时器以进行分析,初始化 MCU,并设置堆栈、堆和全局变量。然后它跳转到 main()。
board初始化是通过调用Board_init() API 来完成的。
RAT 已设置。通过调用Board_init() API设置引脚 MUX 和 UART 控制台。然后将系统固件(SYSFW 或 TIFS)从引导介质加载到 DMSC 子系统中。
一旦系统固件启动并运行,就可以完成其余的初始化工作。
这包括可选地使用Board_init()来配置 PLL、LPSC 和 DDR。
然后 SBL 从引导媒体加载应用程序。如果映像已签名,应用程序将被复制到用户指定的保留内存中,并且 SBL 将尝试通过调用系统固件 API 来验证映像。在 HS 设备上,仅当映像验证通过时才会继续启动。
SBL 从引导媒体解析每个内核的应用程序映像并将其分散加载到内存中。
加载应用程序后,SBL 与系统固件通信以设置内核时钟并将其从复位中释放。
然后核心从应用程序入口点开始执行。




