首页 > 其他分享 >从 TPL/SPL 启动

从 TPL/SPL 启动

时间:2025-01-04 12:34:30浏览次数:3  
标签:USB 启动 SUPPORT TPL SPL CONFIG 加载

主 U-Boot 二进制文件可能太大,无法由 Boot ROM 直接加载。这是将 U-Boot 拆分为多个启动阶段的原始驱动程序。

U-Boot 通常经历以下启动阶段,其中 TPL、VPL 和 SPL 是可选的。虽然许多主板使用 SPL,但只有少数主板使用 TPL

TPL

第三级程序加载器。非常早的初始化,尽可能小。这将加载 SPL(或 VPL,如果启用)。

VPL

验证程序加载器。可选验证步骤,如果启用了 A/B 验证启动,则可以选择多个 SPL 二进制文件之一。VPL 逻辑的实现正在进行中。目前它只是启动到 SPL。

SPL

辅助程序加载器。设置 SDRAM 并正确加载 U-Boot。它还可以加载其他固件组件。

U-Boot

这是唯一包含命令的阶段。它还实现了加载操作系统的逻辑,例如通过 UEFI。

U-Boot SPL 的更多用途包括:

  • 启动 ARM 可信固件的 BL31,以 BL33 的形式调用 U-Boot

  • 启动 EDK II

  • 启动 Linux,例如Falcon 模式

  • 启动 RISC-V OpenSBI 并调用主 U-Boot

目标二进制文件

SPL/TPL 加载的二进制文件可以是:

  • 原始二进制文件,其中入口地址等于起始地址。这是 TPL 支持的唯一二进制格式。

  • FIT图像

  • 旧版 U-Boot 映像

配置

如果 CONFIG_SPL_RAW_IMAGE_SUPPORT=y,则仅 SPL 才支持原始映像。

需要 CONFIG_SPL_FIT=y 和 CONFIG_SPL_LOAD_FIT=y 来加载 FIT 映像。

需要 CONFIG_SPL_LEGACY_IMAGE_FORMAT=y 来加载旧版 U-Boot 映像。CONFIG_SPL_LEGACY_IMAGE_CRC_CHECK=y 可以检查旧版 U-Boot 映像的 CRC32。

映像加载方法

电路板可用的映像启动方法必须在两个地方定义:

主板代码实现了一个函数 board_boot_order(),它枚举最多五种启动方法及其尝试顺序。(启动方法的最大数量目前硬编码为变量 spl_boot_list[])。如果只有一个启动方法函数,则可以改为实现 spl_boot_device()。

配置控制哪些启动方法实际上可用。

从块设备加载 MMC1、MMC2、MMC2_2

这些方法从 SD 卡或 eMMC 读取映像。“MMC”后面的第一位数字表示设备编号。所需的配置设置包括:

  • CONFIG_SPL_MMC=y 或 CONFIG_TPL_MMC=y

要使用 PCI 连接的 MMC 控制器,您还需要指定:

  • CONFIG_SPL_PCI=y

  • CONFIG_SPL_PCI_PNP=y

  • CONFIG_MMC=y

  • CONFIG_MMC_PCI=y

  • CONFIG_MMC_SDHCI=y

要从文件系统加载,请使用:

  • CONFIG_SPL_FS_FAT=y 或 CONFIG_SPL_FS_EXT=y

  • CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<文件路径>"

NVMe

此方法从 NVMe 驱动器加载映像。所需的配置设置包括:

  • CONFIG_SPL_PCI=y

  • CONFIG_SPL_PCI_PNP=y

  • CONFIG_SPL_NVME=y

  • CONFIG_SPL_NVME_PCI=y

  • CONFIG_SPL_NVME_BOOT_DEVICE(NVMe 设备编号)

  • CONFIG_SYS_NVME_BOOT_PARTITION(要读取的分区)

要从文件系统加载,请使用:

  • CONFIG_SPL_FS_FAT=y 或 CONFIG_SPL_FS_EXT=y

  • CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<文件路径>"

SATA

此方法从 SATA 驱动器读取图像。所需的配置设置包括:

  • CONFIG_SPL_SATA=y 或 CONFIG_TPL_SATA=y

要使用 PCIe 连接 SATA 控制器,您还需要:

  • CONFIG_SPL_PCI=y

  • CONFIG_SPL_SATA=y

  • CONFIG_SPL_AHCI_PCI=y

  • CONFIG_SPL_PCI_PNP=y

要从文件系统加载,请使用:

  • CONFIG_SPL_FS_FAT=y

  • CONFIG_SYS_SATA_FAT_BOOT_PARTITION=<分区号>

  • CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<文件路径>"

USB

USB 方法从 USB 块设备加载映像。所需的配置设置包括:

  • CONFIG_SPL_USB_HOST=y

  • CONFIG_SPL_USB_STORAGE=y

要使用 PCI 连接的 USB 3.0 控制器,您还需要:

  • CONFIG_SPL_FS_FAT=y

  • CONFIG_SPL_PCI=y

  • CONFIG_SPL_PCI_PNP=y

  • CONFIG_USB=y

  • CONFIG_USB_XHCI_HCD=y

  • CONFIG_USB_XHCI_PCI=y

要从文件系统加载,请使用:

  • CONFIG_SPL_FS_FAT=y 或 * CONFIG_SPL_FS_EXT=y

  • CONFIG_SYS_USB_FAT_BOOT_PARTITION=<分区号>

  • CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<文件路径>"

从原始闪存设备加载

NAND

此方法从 NAND 闪存加载图像。要从原始 NAND 读取,需要以下配置设置:

CONFIG_SPL_NAND_SUPPORT=y 或 CONFIG_TPL_NAND_SUPPORT=y

如果 CONFIG_SPL_NAND_RAW_ONLY=y,则只能加载原始图像。

要使用 UBI(未分类的块图像)卷从 NAND 读取,需要以下配置设置:

CONFIG_SPL_UBI=y 或 CONFIG_TPL_UBI=y

可以指定要读取的 UBI 卷

使用 CONFIG_SPL_UBI_LOAD_BY_VOLNAME 按名称或按编号使用 CONFIG_SPL_UBI_LOAD_MONITOR_ID。

NOR

此方法从 NOR 闪存加载图像。所需的配置设置包括:

  • CONFIG_SPL_NOR_SUPPORT=y 或 CONFIG_TPL_NOR_SUPPORT=y

OneNAND

此方法从 OneNAND 设备加载图像。要从原始 OneNAND 读取,需要以下配置设置:

  • CONFIG_SPL_ONENAND_SUPPORT=y 或 CONFIG_TPL_ONENAND_SUPPORT=y

要使用 Ubi 文件系统从 NAND 读取,需要以下配置设置:

  • CONFIG_SPL_UBI=y 或 CONFIG_TPL_UBI=y

串行外设接口

此方法从 SPI NOR 闪存加载图像。所需的配置设置包括:

  • CONFIG_SPL_DM_SPI=y
  • CONFIG_SPL_SPI_FLASH=y
  • CONFIG_SPI_LOAD=y 或 CONFIG_TPL_SPI_LOAD=y

Sunxi SPI

此方法特定于 Allwinner SoC,可从 SPI NOR 闪存加载映像。所需的配置设置包括:

  • CONFIG_SPL_SPI_SUNXI=y

从其他设备加载

BOOTROM

二进制文件由启动 ROM 加载。所需的配置设置包括:

  • CONFIG_SPL_BOOTROM_SUPPORT=y 或 CONFIG_TPL_BOOTROM_SUPPORT=y

DFU

设备固件升级用于将二进制文件加载到 RAM 中。所需的配置设置包括:

  • CONFIG__DFU=y
  • CONFIG_SPL_RAM_SUPPORT=y 或 CONFIG TPL_RAM_SUPPORT=y

Ethernet

此方法通过以太网加载映像。BOOTP 协议用于查找 TFTP 服务器和二进制名称。二进制文件通过 TFTP 协议下载。所需的配置设置包括:

  • CONFIG_SPL_NET=y 或 CONFIG_TPL_NET=y

  • CONFIG_SPL_ETH_DEVICE=y 或 CONFIG_DM_USB_GADGET=y

FEL

此方法实际上不会加载 U-Boot 的映像。FEL 是 Allwinner SoC 的引导 ROM 中包含的例程,用于通过 USB 进行初始编程或恢复

RAM

此方法使用预加载到 RAM 中的图像。所需的配置设置包括:

  • CONFIG_SPL_RAM_SUPPORT=y 或 CONFIG_TPL_RAM_SUPPORT=y

  • CONFIG_RAM_DEVICE=y

Sandbox file

在沙箱中,此方法从主机文件系统加载图像。

Sandbox image

在沙箱中,此方法从主机文件系统加载图像

Semihosting

在 ARM 或 RISC-V 虚拟机中运行时,可以使用半主机方法从主机文件系统加载映像。所需的配置设置包括:

  • CONFIG_SPL_SEMIHOSTING = y

  • CONFIG_SPL_SEMIHOSTING_FALLBACK=y

CONFIG_SPL_FS_LOAD_PAYLOAD_NAME=<文件路径>

UART

此方法通过 Y-Modem 协议从 UART 加载图像。所需的配置设置包括:

  • CONFIG_SPL_YMODEM_SUPPORT=y 或 CONFIG_TPL_YMODEM_SUPPORT=y

USB SDP

此方法使用由 i.MX 系列 SoC 的引导 ROM 实现的串行下载协议加载映像。

所需的配置设置包括:

  • CONFIG_SPL_SERIAL=y
  • CONFIG_SPL_USB_SDP_SUPPORT=y 或 CONFIG_TPL_USB_SDP_SUPPORT

VBE Simple

VPL阶段使用此方法从已加载的图像中提取下一阶段的图像。

所需的配置设置包括:

  • CONFIG_VPL=y
  • CONFIG_SPL_BOOTMETH_VBE_SIMPLE_FW=y 或 CONFIG_TPL_BOOTMETH_VBE_SIMPLE_FW=y

XIP

此方法在原地执行图像。

所需的配置设置包括:

  • CONFIG_SPL_XIP_SUPPORT

标签:USB,启动,SUPPORT,TPL,SPL,CONFIG,加载
From: https://blog.csdn.net/qq_37255138/article/details/144923378

相关文章

  • Adapting Static Taint Analyzers to Soffware Marketplaces:A Leverage Point for Ma
    本论文选自SCORED22(不是顶会,但是在ACM官网搜索找到了,也是漏洞挖掘就做了一个梳理)论文工作提出了一种系统化的方法来专门化静态污点分析器,旨在提高软件市场的精确度和召回率。通过这种方法,努力提高静态污点分析的有效性和效率。本文提出的方法建立在文献检索领域的相关工作的......
  • Vue3 启动报错:failed to load config from D:\file\vue\examination_front\vite.c
    今天在创建vue3项目的时候报错了一个启动开发服务器时遇到了一个构建错误 查询了一下,执行npm i的时候,他并没有帮我安装vitePSD:\file\vue\hello_vue3>npmlistvitehello_vue3@0.0.0D:\file\vue\hello_vue3└──(empty)最后执行安装,就能启动了PSD:\file\vue\h......
  • .net framework 中Owin 通过启动类 Startup.cs 使用 SignalR
    1.安装SignalRNuGet包在NuGet包管理器中,搜索 Microsoft.AspNet.SignalR 并安装它2.创建SignalRHubSignalR使用Hub来处理客户端与服务器之间的通信。你可以创建一个SignalRHub类,它会处理客户端和服务器之间的实时消息传递。在你的项目中创建一个名为ChatHu......
  • 免费视频播放器PotPlayer
    软件介绍PotPlayer是一款免费的多媒体播放器,支持各种视频编解码器和格式,由KMPlayer的原制作者姜龙喜先生开发。软件特色1、格式兼容性强PotPlayer几乎支持所有常见的媒体文件格式,包括高清视频如MKV、AVI、MP4以及音频如MP3、FLAC等,无需额外安装编解码器即可流畅播放2、自......
  • Petalinux ARM设置自启动、自动加载驱动、自动挂载SD卡
    一、在工程路径下新建apppetalinux-create-tapps--templateinstall-nmyapp-init--enablepetalinux会在metausr目录下新建一个目录,结构如下project-spec/meta-user/recipes-apps/myapp-init/├──files│  └──myapp-init├──myapp-init.bb└──README......
  • SpringBoot启动流程
    给学妹看的SpringIOC面试题(上)前段时间是校招的高峰期啊,很多学弟,学妹们出去面试的时候都会被问到一个问题,谈谈你对Spring的理解?很多同学都是会说一些IOC,AOP等,但是聊到一些细节IOC里面的细节点,就不知怎么接着和面试官怎么聊了。所以今天我就跟大家具体详细聊聊SpringIOC那些事!!!......
  • 开源零代码平台 敲敲云, Docker 一键安装启动
    Docker快速启动第一步:下载项目gitclonehttps://gitee.com/jeecg/qiaoqiaoyun.git第二步:手工解压出dist和qiaoqiaoyun-start-2.0.jar进入qiaoqiaoyun/安装源目录,手工解压准备后续使用。进入qiaoqiaoyun/安装源目录,手工解压准备后续使用。第三步:在安装源目录......
  • Html启动特定的输入法
    注册表shurufa-Handinput.reg WindowsRegistryEditorVersion5.00[HKEY_CLASSES_ROOT\Handinput]@="URL:HandinputProtocolHandler""URLProtocol"=""[HKEY_CLASSES_ROOT\Handinput\DefaultIcon]@="C:\\ProgramFiles(x86)\\......
  • Linux 内核如何装载和启动一个可执行程序
    Linux内核如何装载和启动一个可执行程序1.Linux可执行程序的加载和启动过程Linux加载和启动一个可执行文件的过程涉及以下步骤:编译和链接:程序的源代码通过编译生成目标文件(通常为.o文件),这些文件包含二进制代码和符号信息。链接器负责将这些目标文件组合成一个可执行文......
  • NetPlier 复现笔记
    安装miniconda3echo"./home/[username]/miniconda3/etc/profile.d/conda.sh">>~/.bashrcecho"condaactivate">>~/.bashrc使用conda安装py3.6环境condacreate--namepy36python=3.6pipinstallnumpy==1.19.5#先装这个不然会报错pipinstall......