SoC 启动加载程序

英特尔® SoC FPGA 使用启动加载程序在硬处理器系统 (HPS) 上加载和运行最终用户应用。最终用户应用可能是简单的裸机应用,也可能是复杂的操作系统,比如 Linux* 操作系统。

本页主要介绍什么是启动加载程序、列举可用的启动加载程序及其主要特征、介绍启动加载程序入门,并列举其他资源。

SoC 设备启动时,首先运行名为 BootROM 的软件。由于种种原因,BootROM 的功能有以下局限性:

  • 需要集成至片上 ROM,因此容量必须小
  • 更换费用昂贵,因此性能必须非常稳定,从而特性较少
  • 不了解系统配置方式,因此无法启动所有配置

另一方面,最终用户应用通常很大,运行之前要求系统配置满足最终用户的要求。

启动加载程序的目的是弥补 BootROM 和最终用户应用之间的差距。

启动加载程序的常见任务包括:

  • 配置引脚多路复用和引脚设置,比如转换速率、电压和 pull-up/pull-down
  • 配置时钟树中的时钟
  • 启动和校准 SDRAM
  • 初始化闪存
  • 通过闪存加载终端应用
  • 将控制传递至终端应用

除上述特性外,启动加载程序还可提供以下高级特性,以支持更复杂的部署和更便捷的开发:

  • 网络访问,通过云启动最终用户应用。
  • 调试工具,支持更加简单便捷地诊断问题。
  • 命令行界面,面向交互命令。
  • 运行框架的应用,支持由启动加载程序加载简单的最终用户应用并运行至完成。应用完成后,控制传回启动加载程序。

启动加载程序的流程有时可分为多个阶段,通常分为两个阶段。

对于 Cyclone® V SoC 来说,BootROM 仅加载最大 64 KB 的启动加载程序,因为该阶段不启动 SDRAM。由于容量限制,因此无法实施网络连接、复杂文件系统访问等高级特性。如果想实施此类特性,启动加载程序的第一阶段启动 SDRAM,然后加载包含更多功能的第二阶段。Cyclone V SoCs 和 Arria® V SoC 默认选择双阶段启动加载程序。

英特尔® Arria 10 SoC 的 RAM 容量较大。借助 256 KB 片上 RAM,启动加载程序的第一阶段所实施的功能比 Cyclone V 和 Arria V SoC 多。因此,通常仅要求一个阶段。然而,在较复杂的情形下,比如访问多种闪存、负载文件系统和网络连接,用户可免费使用另一启动加载程序阶段。

对英特尔 Stratix® 10 SoC 来说,通常使用双阶段启动加载程序。第一个小启动加载程序阶段是 FPGA 配置流的一部分,由安全设备管理器 (SDM) 将其加载至 HPS 片上 RAM,而第二个较大的启动加载程序阶段可保存在 HPS 能够访问到的任何位置。

所有的英特尔® SoC FPGA 项目都从硬件项目开始,用户输入对 HPS 产生影响的各种系统设置,包括:

  • 引脚多路复用 
  • 引脚设置
  • BIOS 设置
  • 时钟设置

启动加载程序的目的是应用这些设置并启动加载程序接收这些设置的过程,称之为硬件-软件交接。

根据启动加载程序和 SoC 设备家族的不同,交接方式也各不相同。通常:

  • 对 Cyclone® V 和 Arria® V SoC 来说,交接为 XML 文件、二进制文件和源代码文件的组合,它们转化为源代码,然后编译至预加载程序
  • 对英特尔 Arria 10 SoC 来说,交接包含在单个 XML 文件中,该文件转化为设备树文件,并用于启动加载程序
  • 对英特尔 Stratix 10 SoC 来说,交接信息为 FPGA 配置位流的一部分

输入或更改交接信息的主要方法是在 Qsys 中编辑交接信息。

除交接信息外,启动加载程序还包含各种设置,用户可通过下列方法选择设置:

  • 在 BSP 编辑器中更改设置
  • 编辑启动加载程序源代码

设备树使用过程中编辑启动加载程序设备树

下表列举了可用启动加载程序、许可类型、支持的 SoC,以及是否支持双阶段:

启动加载程序 许可类型 Cyclone® V SoC Arria® V SoC 英特尔® Arria 10 SoC 英特尔 Stratix® 10 SoC 双阶段支持
U-Boot GPL Yes Yes Yes Yes Yes
MPL BSD Yes Yes Yes - -
UEFI BSD - - Yes Yes Yes
ATF BSD - - - Yes -

U 启动是业内广泛采用的一种启动加载程序,可提供多种功能:

  • 操作型第一阶段称为 "SPL",面向片上 RAM 有限的系统(例如 Cyclone® V SoC 和 Arria® V SoC)
  • 网络功能
  • 闪存支持
  • 命令行界面
  • 脚本编辑
  • U 启动自定义应用

U 启动在通用许可证 (GPL) 的基础下开发而成,因此针对面向大众的产品的所有贡献都必须公之于众。

如欲获取 U 启动源代码,可访问 GitHub 网站上的 U 启动 SoC FPGA 页面。

对英特尔® Arria 10 SoC、Arria V SoC 和 Cyclone V SoC 来说,U 启动源代码包含在英特尔 SoC FPGA 嵌入式开发套件 (SoC EDS) 中,可帮助简单便捷地实施开发流程。

请注意,Cyclone V 和 Arria V SoC 支持现已成GitHub 网站上的官方 U 启动 git 树的主流。目前正开展工作使英特尔 Arria 10 SoC 支持也成为主流。

主要的通用 U 启动主页位于Das U 启动 -- 通用启动加载程序网页

最小预加载程序 (MPL) 是采用英特尔 SoC FPGA 裸机硬件抽象库 (HWLIB) 开发而成的启动加载程序。这种单阶段启动加载程序旨在最大限度缩小占用空间。

MPL 适用于以下设备:

  • Cyclone® V SoC
  • Arria® V SoC
  • 英特尔® Arria 10 SoC

MPL 配备了 Berkeley Software Distribution (BSD) 许可证,支持更便捷地进行开发和部署。

MPL 作为 SoC EDS 的一部分交付,而且是 <SoC EDS Installation Folder>/embedded/examples/software/Altera-SoCFPGA-HardwareLib-MPL.tar.gz 文件中的项目存档。存档包含一个名为 README.txt 的文件,其中包含详细的 MPL 介绍和使用信息。

统一可扩展固件接口 (UEFI) 是一种标准化固件规范,可简化平台初始化和固件引导过程。

UEFI 启动加载程序适用于以下设备:

  • 英特尔® Arria® 10 SoC
  • 英特尔 Stratix® 10 SoC

由于 UEFI 定义非常明确并被数百家技术公司所采用,因袭大量代码都可复用,从而有助于加快开发周期。

UEFI 在英特尔 SoC FPGA 上实施时包含两个不同的阶段:

  • Pre-Efi 初始化阶段 (PEI)。该阶段配置平台并加载最终用户应用或 DXE。
  • 驱动程序执行环境 (DXE)。该阶段加载其他 UEFI 驱动程序,并支持更多扩展功能,比如网络和命令行界面。

UEFI 启动加载程序还支持运行以 DXE 环境为目标的特定应用。然后可以在退出控制返回 DXE 时执行此类应用。

UEFI 配备 BSD 许可,支持更便捷地进行开发和部署。

如欲获取 UEFI 源代码,可访问 GitHub 网站上的 UEFI SoC FPGA 页面 。

对英特尔 Arria 10 SoC 来说,UEFI 还提供 SoC EDS 支持与 U 启动相同的开发流程。

ARM 可信固件 (ATF) 是一种面向 ARMv8-a 的安全世界软件的参考实施,实施各种 ARM 接口标准,比如可信开发板启动要求 (TBBR) 和安全显示器调用。

ATF 是在 BSD 许可的基础下协作开发而成,支持更便捷地进行开发和部署。

ATF 的占用空间小,并设计为第一阶段启动加载程序 (FSBL)。它与 UEFI 一起用于加载 PXE 以及之后的 DXE,但它还可用于譬如加载简单的裸机应用。

如欲获取 ATF 的英特尔 SoC FPGA 端口源代码,请访问 https://github.com/altera-opensource/arm-trusted-firmware

MPL 作为 SoC EDS 的一部分交付,而且是 <SoC EDS Installation Folder>/embedded/examples/software/Altera-SoCFPGA-HardwareLib-MPL.tar.gz 文件中的项目存档。该存档包含一个名为 README.txt 的文件,其中包含关于英特尔® Arria 10 SoC、Arria® V SoC 和 Cyclone® V SoC 的详细使用信息。

如欲获取源代码请访问以下网站: