翻译原文来自:https://www.rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide

Preloader或Secondary Program Loader (SPL) -是Boot ROM要调用的一个软件,其终极目的是对系统进行初级配置,直到系统处于U-Boot可以运行的状态。这包括设置锁相环和时钟、复用引脚的配置、初始化SDRAM等等。由于每次修改Qsys系统时系统的配置都可能发生变化(preloader 依赖于许多HPS的配置选项),因此每次更改硬件设计时都必须重新生成preloader 。一般Quartus会给你一个警告提醒您是否需要重新生成preloader。

 

其实生成preloader 并不像看起来的那么复杂(特别是在设置了Board Support Package设置文件之后就更简单了)。有一个方便的GUI工具叫做BSP编辑器(术语“BSP”和“Preloader”是同义词),它可以处理大部分繁重的工作。这个工具根据所有的硬件/软件handoff 文件(这些文件是由Qsys/Quartus生成的,告诉BSP编辑器如何为用户的配置来配置硬件)和您想要设置的任何配置选项一起来输出一组源代码文件,这些文件可以编译成适当的preloader 镜像。

preloader 实际上是基于U-Boot的二级程序加载,这是一段代码,它知道如何启动U-Boot,并由Altera做了一些修改,使其能在Altera的SoC产品上工作。这就是为什么BSP编辑器只需关心生成特定于用户硬件配置的代码,然后在编译时从SoCEDS and ARM Development Studio目录复制并粘贴其余的源代码(上图中的“U-Boot Source Code Archive”)。

 最后一组源代码是通过一个简单的make(BSP编辑器将生成一个makefile文件) 调用来编译的。这将产生一个Boot ROM可以加载的Preloader镜像。稍后,我们将使用这个Preloader镜像并将其刻录到SD卡上以实际测试我们的系统。

顺便提一下,我从Rocketboards网站搜集了以下大部分信息。另外您可以访问本页底部的资源链接获得更多帮助。

开启BSP 编辑器

请下载atlas_linux_ghrd.tar.gz文件,并将其解压缩到您选择的文件夹中。

tar –xzvf atlas_linux_ghrd.tar.gz

接下来,启动embedded command shell。这个shell设置了本指南后面要使用的工具所需的许多环境变量和路径。如果您关闭了shell,请记得在继续本指南之前重新打开它。

<path-to-soceds-tools>/embedded/embedded_command_shell.sh

进入刚刚解压缩的atlas_linux_ghrd文件夹。

cd atlas_linux_ghrd

现在开启BSP编辑器

bsp-editor &

此时会出现BSP编辑器GUI。如果你曾经使用过Nios II构建工具的BSP编辑器,你会注意到它看起来与这个BSP编辑器非常相似。所以,如果你以前习惯了BSP编辑器,你会觉得很自在(但如果不习惯,也不用担心,BSP编辑器使用起来并不复杂)。

 在“BSP编辑器”窗口中,选择“ File→New HPS BSP... ”为您板子的preloader创建一个新的BSP项目。此时应该出现以下窗口。

点击“Preloader settings directory”旁边的“…”按钮,浏览到“atlas_linux_ghrd/hps_isw_handoff/soc_system_hps_0”,点击“Open”。这告诉BSP编辑器我们的handoff 文件的位置。


窗口现在应该自动填充了所有设置。单击OK接受默认设置。

 

 

配置Preloader

在现在出现的窗口中,我们可以配置由BSP编辑器生成的代码。实际上,大多数默认设置都是我们想要的,但是作为初学者的我们也可以逐步地去了解一些更重要的设置,这样我们就知道哪些设置我们可以去自定义。

在“Settings”栏下的(窗口的左侧)树状视图中,点击“Common”。这将向您显示最重要的设置:引导选项,告诉preloader在哪里找到bootloader。就像我们必须告诉Boot ROM在哪里找到带有BSEL引脚的preloader一样,这些选项告诉preloader在哪里找到bootloader。可以看到,您可以将bootloader放在QSPI Flash、NAND Flash、RAM或SD卡上。请确保BOOT_FROM_SDMMC是启用的,因为后面我们将把U-Boot放在我们的SD卡上。

 

我们还将U-Boot放置在上述SD卡上的FAT分区上,因此确保启用FAT_SUPPORT并将FAT_BOOT_PARTITION设置为“1”(当我们格式化SD卡时,我们将确保我们放置U-Boot的分区将是分区1)。最后,确保FAT_LOAD_PAYLOAD_NAME设置为“U-Boot .img”。可以推断,这是preloader要查找的U-Boot映像的名称。

 如果我们不启用FAT_SUPPORT,我们必须将bootloader放置在SD卡上的地址0x40000处,以便系统成功地找到bootloader。在左侧树状视图中,选择“Advanced→spl→reset_assert”。如果这些复选框中的任何一个被启用,preloader将使HPS的那一部分处于重置状态。我们不需要重置任何东西,所以不要勾选这些复选框。

 在“Advanced→spl→boot”下,您可以找到启用看门狗定时器、校验检查和SDRAM擦除的选项。如果您的开发板具有ECC存储的RAM,则应该在此处启用SDRAM擦除(目前Atlas板没有这些,因此我将关闭此功能)。

最后,在“Advanced→spl→performance”下,注意“SERIAL_SUPPORT”框是如何启用的。这意味着预加载程序在运行时将通过UART打印出状态消息。我鼓励您阅读剩余的可用选项(没有太多),以了解您可以使用预加载器做什么。要获取任何选项的帮助信息,请展开左侧的树视图,直到可以看到各个选项,然后单击希望看到帮助的选项。

 单击右下角的Generate,完成后单击Exit。

编译Preloader

回到终端,cd到新的“software/spl_bsp”目录,然后ls查看新文件。

cd software/spl_bsp ; ls

特别重要的是generated文件夹,以及Makefile和settings.bsp这些文件。generated文件夹包含从BSP编辑器生成的所有源代码。当我们编译时,此代码将与存储在SoCEDS和ARM Development Studio目录中的U-Boot代码合并。settings.bsp文件包含您刚刚在bsp编辑器GUI中设置的所有选项。最后,我们将使用Makefile来生成预加载器镜像。(还有几个文件是适用于DS-5的,但这里我们将忽略它们)。

make

编译之后,您将发现一个新的“uboot-socfpga”目录,其中包含一个名为“spl”的子文件夹,其中包含与生成的代码合并的辅助程序加载器的代码。还有一个新的“preloader-mkpimage.bin”文件,其中包含预加载程序镜像和引导ROM头文件,引导ROM需要将其识别为实际的预加载程序镜像。稍后我们将把这个文件刻录到SD卡上。

 

继续下一节学习如何编译U-Boot。

资源

Altera SoC Workshop #2 – Lab 1

这个lab是本页大部分信息阐述的来源。本页信息有一些是我认为lab有缺失的部分然后我试着补充的。如果我的补充还没有让您很明白,那你一定要试试这个lab。

Preloader and U-Boot Customization

对于那些想要从初始层面上开始去理解preloader的人来说,这是最初始的指南。如果你想修改preloader以支持你自己的自定义板,这里也是学习的地方。指南底部的图形非常详细地描述了prelaoder的工作原理,我建议你也可以看一眼。