
本文档由创龙科技研发,专为安路飞龙 DR1M90 FPSoC 产品打造,聚焦 Linux 系统全流程开发需求。
Windows开发环境:Windows10 64bit
Linux开发环境:VMware16.2.5、Ubuntu22.04.4 64bit
LinuxSDK开发包:LinuxSDK-[版本号](基于SDK_2025.1)
交叉编译工具链:
应用开发:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
U-Boot、内核开发:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
评估板系统版本:U-Boot-2021.01、Linux-6.1.111、Buildroot-2022.02
备注:本文基于8GByte eMMC、1GByte DDR3配置核心板进行演示。
BOOT.bin文件为SoC的启动镜像,一般包含FSBL、比特流文件(用于配置PL)、被引导的应用、数据文件,遵循固定的结构,以便SoC上电时BootRom对其进行解析。
具体说明如下:
(1)FSBL:非必须,主要功能为初始化SoC、引导应用程序,配置PL比特流。
(2)比特流文件:非必须,在使用到PL端逻辑资源时必须使用。
(3)应用程序:必须,若运行在OCM,且不依赖PL端,则可单独使用;其他情况下被FSBL引导;引导Linux系统则为u-boot.bin。
(4)数据:可选,一般用于将数据加载至固定内存地址。

备注:我司提供的BOOT.bin由FSBL和U-Boot镜像合并生成,不含比特流文件、数据。
FSBL(First Stage Bootloader)为一级Bootloader程序,我司提供的FSBL工程中已对PS端相关外设进行配置。
我司提供的FSBL TD工程位于“4-软件资料\Linux\FSBL\fsbl-[版本号]\hw\project\”目录下,请参考《TD-FD工程编译与加载》文档导入TD工程。
双击fsbl,即可打开的Design界面。


在Design界面双击"ARM Processor System" IP即可打开配置界面,该界面为FPSoC Diagram,显示基本配置框图,点击橙色部分可跳转到该功能详细配置界面。

可通过打开相应的窗口来查看相关配置。
(1)打开"PS-PL interfaces"窗口查看PS-PL配置。

(2)打开"Peripherals and Pin Mux"窗口查看外设配置。

(3)打开"Clocks"窗口查看时钟配置。

(4)打开"PS DDR"窗口查看DDR配置。

(5)打开"AI"窗口查看NPU配置。

请参考《TD-FD工程编译与加载》文档编译FSBL TD工程。

在FPSoC的应用开发过程中,需将硬件设计信息通过文件的形式传递至软件开发工具(FD)中使用,该文件被称之为HPF(Hardware Platform File)文件。
我司提供的HPF文件位于“4-软件资料\Linux\FSBL\fsbl-[版本号]\hw\bin\”目录下,下文演示HPF文件的生成。
在菜单栏中依次点击"Project -> Export Hardware Platform File"。

在弹窗内,勾选"Include bitstream",导出路径选择默认在当前工程内,点击OK。

弹窗显示导出HPF文件成功,并显示HPF文件的存放路径,点击"Ok"。

我司提供的FSBL FD工程位于“4-软件资料\Linux\FSBL\fsbl-[版本号]\sw\baremetal_demo\project\”目录下,下文演示FSBL FD工程的生成。打开FD软件,在Workspace中指定工程存放路径,点击"Launch"。Workspace是FD的工作目录,该目录下包含了Platform工程、app工程以及用户配置文件。

在菜单栏中依次点击"File -> New -> Platform Project",创建Platform工程。

在弹出的对话框中,根据实际情况设置Project Name(工程名),"HPF File"选择刚刚导出的HPF文件所在路径,点击"Finish"生成Platform工程。

至此,创建Platform工程完成。

在菜单栏中依次点击"File -> New -> Application Project",创建FSBL FD工程。

在弹出的对话框中,根据实际情况设置Project Name(工程名),"Template List"选择"FSBL",点击"Finish"生成FSBL FD工程。FSBL FD工程即为app工程,其主要功能为引导BOOT.bin中的数据和程序。

至此,已生成FSBL FD工程。

我司提供的elf文件位于“4-软件资料\Linux\FSBL\fsbl-[版本号]\sw\baremetal_demo\bin\”目录下,可直接使用。
本小节演示elf文件的生成。鼠标右键FSBL工程,选择"Reset Project"。

点击"Reset"。

点击"Close"。

在菜单栏中依次点击"Project -> Build All",编译FSBL FD工程。

编译完成,并在fsblgon工程的build目录下生成fsbl.elf文件。fsbl.elf需与u-boot.bin文件合成BOOT.bin使用。


U-Boot为二级Bootloader程序。
U-Boot源码位于LinuxSDK源码u-boot目录,具体说明如下表。


U-Boot可使用menuconfig进行配置,请参考“配置内核选项”章节,配置menuconfconfig所需依赖环境。
在LinuxSDK源码目录下,执行如下命令,通过menuconfig配置U-Boot。
Host# cd /home/tronlong/DR1/SDK_2025.1/
Host# ./build.sh ubootmenuconfig


可通过键盘的方向键选中对应菜单栏。在<Select>被选中的情况下,可按Enter键进入子菜单。菜单选项中蓝色高亮的字母代表此菜单选项的快捷键,可在键盘上按下对应的字母快速选中对应的菜单选项。
每个菜单选项前的括号内容表示当前菜单选项的配置状态。选中对应的菜单选项后,按下Y键,会将相应的选项配置编译到U-Boot中,同时菜单选项前面变为< * >。按下N键,不会将相应的选项配置编译到U-Boot中。如需搜索,可按下/键打开搜索框,然后输入要搜索的内容。
配置完毕后,选中<Save>,按Enter键保存配置选项。然后选中<Exit>,按Enter键退出。

在LinuxSDK源码目录下执行如下命令,配置编译选项,并单独编译U-Boot。
Host# ./build.sh uboot


编译完成后,最终在LinuxSDK源码"device/output/anlogic_dr1m90/u-boot"目录下生成U-Boot镜像如下所示。

BOOT.bin由fsbl.elf和u-boot.bin合成。fsbl.elf文件位于产品资料“4-软件资料\Linux\FSBL\fsbl-[版本号]\sw\baremetal_demo\bin\”目录下,u-boot.bin文件位于“4-软件资料\Linux\U-Boot\image\u-boot-2021.01-[版本号]-[Git序列号]\”目录下,可直接使用。
备注:版本号、Git序列号请以实际情况为准。
打开FSBL FD工程,在菜单栏中依次点击"Tools -> Create Boot lmage"。


"Output BlF file path"为output.bif存放路径,"Output path"为BOOT.bin存放路径,请根据实际路径进行选择。在"Boot image partitions"中点击"Add"选择和配置需要被打包到Boot.bin的分区文件,本次以添加FSBL镜像fsbl.elf和U-Boot镜像u-boot.bin为例进行演示,配置参数如下图。



配置完成,点击"Create lmage",生成BOOT.bin文件。


将Linux系统启动卡通过读卡器连接至PC机,直接替换Linux系统启动卡BOOT分区的BOOT.bin原文件即可。

请将需替换的BOOT.bin文件拷贝至评估板文件系统的任意目录下,执行如下命令替换BOOT.bin文件至Linux系统启动卡。
Target# cp ./BOOT.bin /mnt/mmcblk0p1/BOOT.bin
备注:如需替换BOOT.bin至eMMC,请将设备节点修改为"/mnt/mmcblk1p1"。

评估板上电启动后,在U-Boot倒计时结束之前按下"Ctrl + C"进入U-Boot命令行模式。
(1)环境变量存储
执行命令"setenv"或"env default -f -a"修改的是运行空间中的环境变量值,须使用"saveenv"命令将修改后的环境变量保存起来。否则U-Boot重启后,将会使用修改前的环境变量值。环境变量修改完成后,执行reset命令,即可使用修改后的U-Boot环境变量启动。
U-Boot# env default -f -a
U-Boot# saveenv
U-Boot# reset

(2)默认配置信息
在U-Boot命令行执行"printenv"命令可查看环境变量。不同版本的U-Boot,环境变量可能会有所不同,内容仅供参考。
U-Boot# printenv


(3)环境变量说明
关键环境变量说明如下。
/* 架构、CPU和板卡信息 */
arch=arm
cpu=armv8
soc=dr1m90
board=evb_dr1m90
board_name=evb_dr1m90
vendor=anlogic
/* 串口控制台和波特率设置 */
baudrate=115200
stderr=serial@f8401000
stdin=serial@f8401000
stdout=serial@f8401000
/* 网络配置 */
ipaddr=192.168.199.138
netmask=255.255.255.0
serverip=192.168.199.114
/* 内核和设备树加载地址 */
fdt_addr_r=0x18000000
kernel_addr_r=0x10000000
/* 内核和设备树文件名 */
kernel_image=kernel.bin
devicetree_image=dtb.bin
/* 内核镜像和设备树文件路径 */
bootdir=/boot
/* 支持的启动设备类型 */
boot_targets=mmc0 mmc1 ubifs0 nand qspi
/* 当前启动类型 */
boot_type=mmc0
/* 主要启动命令 */
bootcmd=run an_bootcmd
/* 自动启动命令逻辑 */
an_bootcmd=if env exists boot_type; then for target in ${boot_targets}; do if test ${boot_type} = ${target}; then run bootcmd_${target}; fi; done; fi;
/* 各启动设备的命令 */
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
/* MMC设备启动流程 */
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; if test ${devnum} -eq 0; then setenv bootargs 'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait';fi; if test ${devnum} -eq 1; then setenv bootargs 'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk1p2 rw rootfstype=ext4 rootwait';fi; ext4load mmc ${devnum}:2 ${kernel_addr_r} ${bootdir}/${kernel_image}; ext4load mmc ${devnum}:2 ${fdt_addr_r} ${bootdir}/${devicetree_image}; bootm ${kernel_addr_r} - ${fdt_addr_r}; run scan_dev_for_boot_part2; fi
Kernel参数传递指的是在启动内核时,通过特定机制将配置参数或启动选项传递给内核,以控制其初始化行为、硬件配置、运行模式等。
评估板默认参数如下。
bootargs 'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait'
参数解析:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。