前言

本系列请点击:《搞一下TDA4》

所有系列请点击:《汽车电子系列分享》

本文档将介绍如何在处理器SDK TDA4(RTOS/Linux) 中理解辅助引导加载程序SBL

全系内容可在《搞一下汽车电子》后台回复 “系列”,或进入菜单栏 “分享平台” --> “系列分享”

搞SOA、搞 AP & CP AUTOSAR、搞异构SoC、搞车载以太网、搞车载OS等就找搞一下汽车电子

一、缩略术语和定义

二、介绍

处理器 SDK J721E(RTOS/Linux) 中有两种Bootloader,他们是:

1、RTOS Bootloader(SBL)
2、 Linux Bootloader(SPL)

(一)RTOS Bootloader

RTOS Bootloader 被称为 SBL (辅助引导加载程序).

SBL在RTOS SDK中的位置
pdk__/packages/ti/boot
当 SoC 上的所有核都运行 SysBIOS 时,将使用SBL

在这种情况下,SD卡中将看到下面的启动文件

tiboot3.bin是SBL,ROM Bootloader将在MCU R5F Core0上引导SBL
tiboot3.bin将引导tifs.bin,tifs.bin是 DMSC 固件二进制文件
tiboot3.bin 将引导一个名为 “app”的文件,此文件包含所有其他CPU的二进制文件,如R5F,A72,C6x,C7x

“app"是通过运行离线工具创建的,该工具将elf(.out)文件转换为.rprc格式,然后将这些打包成"多核镜像”。

SBL设置PLL时钟,上电I / O外设,初始化DDR,加载应用程序镜像到DDR中,并复位其它核。
SBL初始化多核应用程序的执行环境,这可用于演示实际的产品体验。

引导加载程序执行顺序

上电复位

ROM Bootloader (RBL)

在ROM存储器中预装程序开始执行
RBL执行平台配置和初始化
然后,检查系统引导引脚并选择引导设备
然后,RBL 为 R5 配置 PLL 和时钟设置,并为 eMMC、SD/MMC、OSPI、UART、PCIe、Ethernet等启动介质提供可靠启动。
如果在引导设备上找不到有效的引导加载程序,RBL 将根据系统引导引脚检查下一个引导设备
然后,它通过检查作为引导加载程序镜像一部分的 X.509 证书来获取镜像大小和加载地址。
RBL 验证、解密二进制文件并将其加载到 X.509 证书中指定的加载地址处的内部存储器。
最后,它重置 R5 并将控制权传递给在 R5 上运行的SBL

Secondarybootloader(SBL)

用户级程序 SBL从内部存储器开始执行。它使能 ATCM,启动 PMU 计时器进行分析,初始化 MCU,并设置堆栈、堆和全局变量。然后跳转到 main函数。
通过调用Board_init API 来完成板卡的初始化。
设置RAT。Pin MUX 和 UART 控制台通过调用 Board_init API 进行设置,然后将系统固件(SYSFW 或 TIFS)从引导介质加载到 DMSC 子系统中

一旦系统固件启动并运行,就可以完成其余的初始化。
这包括可选地使用 Board_init来配置 PLL、LPSC 和 DDR。
然后,SBL 从引导媒介加载应用程序. 如果镜像已签名,则应用程序将被复制到用户指定的保留内存中, SBL 将尝试通过调用系统固件 API 来验证镜像。在高安设备上,仅当镜像验证通过时,启动才会继续
SBL 从引导媒介解析每个内核的应用程序镜像,并将其分散加载到内存中。
一旦应用程序被加载后,SBL 将与系统固件通信,以设置内核的时钟并将其从重置中释放出来。
然后核从应用程序入口地址开始执行。

(二)MCU-MPU启动时序

三、编译步骤

(一)tiboot3.bin编译步骤

SBL镜像文件位于:
/packages/ti/boot/sbl/binary/

1、在PDK_INSTALL_DIR/packages/ti/build目录执行
cd PDK_INSTALL_DIR/packages/ti/build

2、要编译从SD/MMC启动的SBL 二进制文件,请使用以下命令:
make sbl_mmcsd_img_hlos BOARD= j721e_evm

3、SD/MMC SBL位于
PDK_INSTALL_DIR/packages/ti/sbl/binary/j721e_evm/mmcsd/bin
sbl_mmcsd_img_hlos_mcu1_0_release.tiimage

4、拷贝
sbl_mmcsd_img_hlos_mcu1_0_release.tiimage
到SD卡的boot分区
重命名为tiboot3.bin

(二)SBL编译时选项

SBL 支持多个编译时选项来调整SBL 以满足易用性要求, 启动时间和大小. 可以通过编辑sbl_component.mk 来启用或禁用这些功能

SBL_LOG_LEVEL
控制 SBL 日志(在 MCU UART 上)和系统固件日志(在 WAKEUP UART 上)的数量。从 0(no logs)到 3(all logs)

SBL_USE_DMA
有效值为 0(使用 CPU 访问启动媒介)或 1(使用 DMA 访问启动媒介)

SBL_DISPLAY_PROFILE_INFO
在系统启动结束时,显示不同 SBL 配置文件点的时间戳日志。这对于查看 SBL 在不同函数中花费的时间非常有用。SBL_LOG_LEVEL会显著影响性能。

SBL_ENABLE_PLL
设置所有调用 Board_init的 PLL。使应用程序更容易,因为它们不再需要初始化 PLL。但是,启用此功能会显著增加启动时间和功耗。

SBL_ENABLE_CLOCKS
通过调用 Board_init启用所有模块时钟。使应用程序更容易,因为它们不再需要启用时钟

SBL_ENABLE_DDR
初始化 DDR。以启动时间为代价,这使应用程序能够从 DDR 运行并使用 DDR。SBL_ENABLE_CLOCKS和SBL_ENABLE_PLL也必须启用。启用此选项会增加启动时间。

SBL_SKIP_MCU_RESET
跳转到 MCU0 应用程序入口点,而不重置核。实现更快的启动时间。不会更改 MCU 的模式(lock-step/split)。应用程序还继承了SBL保留的MCU状态。

SBL_ENABLE_DEV_GRP_MCU
将导致系统固件在系统固件初始化期间仅使用 MCU 域资源。这样做既可以支持在主电源域关闭时启动,也可以节省启动时间。

SBL_ENABLE_HLOS_BOOT
SBL将采取一些额外的步骤来准备某些外围设备和资源,以便从Cortex-A内核移交给HLOS(Linux)控制。

SBL_HLOS_OWNS_FLASH
确保 SBL 将 OSPI 闪存保持在单个 SPI 模式,以便 MAIN 域 Cortex-A 代码(HLOS)可以重置闪存并在需要时对其进行控制。

SBL_SKIP_PINMUX_ENABLE
SBL 将跳过在引导加载程序中完成的任何 PINMUX 初始化,并期望它由后续应用程序处理。

(三)tifs.bin编译步骤

tifs.bin镜像文件位于:
/packages/ti/drv/sciclient/soc/V1/

1、在PDK_INSTALL_DIR/packages/ti/build目录下执行
cd PDK_INSTALL_DIR/packages/ti/build

2、编译tifs镜像, 请执行下列命令:
make sciclient_package

3、拷贝tifs.bin到SD卡的启动分区.

(四) HLOS+RTOS镜像编译步骤

使用combined_appimage工具打包HLOS+RTOS镜像

创建一个combined.appimage 文件,包括启动 SoC 的 Cortex-A 内核上的 U-boot 或 HLOS 所需的所有镜像,以及在其他远程核上启动 RTOS 镜像,可以通过以下 4 个步骤完成:

1、修改sbl/tools/combined_appimage/config.mk 文件中HLOS_BIN_PATH变量指向要启动所需 HLOS 镜像

2、修改config.mk文件中的HLOS_BOOT变量以选择" development"选项(boots to SPL/U-boot)或" optimized "选项(boots ATF/OPTEE/Linux)

3、修改RTOS_BIN_PATH变量指向您的RTOS二进制文件,然后列出要加载的对应核和二进制文件:IMG1,IMG2,…

4、使用以下 make 命令制作combined.appimage应用:
cd<sdk_install_path>/pdk_*/packages/ti/boot/sbl/tools/combined_appimage
make cdbin/ j721e_evm ls -l

5、拷贝combined.appimage到SD卡的boot分区,然后重命名为app。

本期分享就到这里,欢迎大家一起交流学习,如果有不合理的地方也请大家指正,愿和大家一起学习进步,一步步做好汽车电子软件开发。

如果大家有想分享的内容,欢迎大家一起来分享! 更多内容请关注微信公众号《搞一下汽车电子》

更多其他内容,也可以随时与我们联系。

联系我们

微信:shactiontech
邮箱:support@shactiontech.com

搞一下TDA4 | 03 TDA4 辅助引导加载程序SBL相关推荐

  1. 引导加载程序之争: LILO 和 GRUB

    在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序.通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU ...

  2. 【技术分享】如何解锁高通骁龙660上的安卓引导加载程序

    本文是我们在DEF CON 29大会上的演示视频的配套文章,视频的链接地址为https://www.youtube.com/watch?v=z4gIxdFfJDg. 要想在安卓手机上获得root权限, ...

  3. Linux加载Linux的引导程序,Linux的引导-引导加载程序:LILO和GRUB

    打开计算机时,计算机执行存储在ROM中的引导代码,这些代码接下来尝试确定如何加载并启动内核.内核检测系统的硬件,然后产生系统的init进程,这个进程总是PID 1. 在出现登录提示符以前,要完成几项工 ...

  4. 备份linux分区到usb,将Linux引导加载程序备份到USB的方法

    本文介绍如何将Linux引导加载程序备份到USB以应对紧急情况.大多数Linux操作系统使用的引导加载程序称为Grub,这是一个简单的工具,可以配置为在PC启动时从菜单启动Linux发行版以及其他操作 ...

  5. cwyw不是有效的加载项_ADAS/AD开发09 - UDS与引导加载程序

    本文属于ADAS控制器开发系列.以智能前视摄像头模块为基础. 前言 引导加载程序,即Bootloader(简称BL),是ECU的基本模块,实现方式也很多. 本文介绍的Bootloader刷写功能的下载 ...

  6. 如何配置Ubuntu 16.04 GRUB 2引导加载程序

    正如你所知,GRUB 2 是大多数 Linux 操作系统的默认引导加载程序.GRUB 是 GRand Unified Bootloader 的缩写,它是 Linux 启动时首先要加载的一个程序,此后它 ...

  7. BootLoader——嵌入式系统的引导加载程序

    BootLoader--嵌入式系统的引导加载程序 一.BootLoader的简介 1.1 BootLoader在固态存储设备中的位置 1.2 BootLoader的启动过程 1.3 BootLoade ...

  8. Z-Wave 700应用程序框架第七章 - 固件更新和引导加载程序

    本节的目的是描述如何生成和管理固件更新映像. ZW700 SDK附带三个引导加载程序映像. 一个是FG14模块的OTW图像. 这个引导加载程序只适用于运行SerialAPI的FG14设备. 另外两个引 ...

  9. 一加3t运行linux,【漏洞分析】获取已锁定的OnePlus 3/3T:引导加载程序漏洞

    翻译:胖胖秦 预估稿费:120RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 前言 在这篇博文中,我公开了OnePlus 3/3T引导加载程序中的两个漏洞.第一个CVE- ...

最新文章

  1. 目录:SpringBoot学习目录
  2. js笔记(8)之数组篇
  3. 让知识来指引你:序列推荐场景中以知识为导向的强化学习模型
  4. 易中天与单田芳的区别在哪儿
  5. 《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案
  6. 活动 Web 页面人机识别验证的探索与实践
  7. linux中的medium_如何在freeCodeCamp Medium出版物中发布
  8. 用Openswan组建Linux IPSec ---第一部分
  9. Reading Club·Beijing第1期DeepQA框架与Siri架构会场笔记(PPT下载)
  10. 传统人工势场法的MATLAB实现
  11. 如何做好项目进度管理
  12. php 邮箱反垃圾机制,避开反垃圾邮件机制的qq邮件群发技巧
  13. python 爬虫 一键爬取携程旅游团数据
  14. LEF和GDS匹配问题
  15. an怎么做淡入_切换场景的淡入淡出效果
  16. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0: invalid start
  17. 字符数组与字符串处理函数
  18. HiveServer2服务简介
  19. 三坐标最小二乘法原理_全最小二乘法在三坐标测量中的应用
  20. jupyterlab下载遇到的问题及解决方案

热门文章

  1. Introduction to Graph Neural Network(图神经网络概论)翻译:目录总览
  2. 人生如梦,一尊还酹江月(评倚天屠龙记)
  3. C语言基础知识复习(1)
  4. 1404111-67-6,N-Boc-PEG5-alcohol,N-Boc-PEG5-CH2CH2OH实验室常用试剂的保存方法
  5. J9数字科普:Web3.0世界中的J9NFT:仍在发展但未来可期
  6. 云计算基础:云计算运用越来越广泛,我们应该如何去学习云计算
  7. brpc源码解析(四)—— Bthread机制
  8. Miniconda3环境搭建详细流程
  9. 台式计算机怎样能搜无线连接,台式机怎么连接wifi,教您连接方法
  10. 在javascript中重新加载/刷新页面的不同方法