电子说
前 言
本文档由创龙科技研发,专为安路飞龙 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开发
BOOT.bin文件为SoC的启动镜像,一般包含FSBL、比特流文件(用于配置PL)、被引导的应用、数据文件,遵循固定的结构,以便SoC上电时BootRom对其进行解析。
具体说明如下:
(1)FSBL:非必须,主要功能为初始化SoC、引导应用程序,配置PL比特流。
(2)比特流文件:非必须,在使用到PL端逻辑资源时必须使用。
(3)应用程序:必须,若运行在OCM,且不依赖PL端,则可单独使用;其他情况下被FSBL引导;引导Linux系统则为u-boot.bin。
(4)数据:可选,一般用于将数据加载至固定内存地址。
图 17
备注:我司提供的BOOT.bin由FSBL和U-Boot镜像合并生成,不含比特流文件、数据。
FSBL开发
FSBL(First Stage Bootloader)为一级Bootloader程序,我司提供的FSBL工程中已对PS端相关外设进行配置。
FSBL TD工程说明
我司提供的FSBL TD工程位于“4-软件资料LinuxFSBLfsbl-[版本号]hwproject”目录下,请参考《TD-FD工程编译与加载》文档导入TD工程。
双击fsbl,即可打开的Design界面。
图 18
图 19
在Design界面双击"ARM Processor System" IP即可打开配置界面,该界面为FPSoC Diagram,显示基本配置框图,点击橙色部分可跳转到该功能详细配置界面。
图 20
可通过打开相应的窗口来查看相关配置。
(1)打开"PS-PL interfaces"窗口查看PS-PL配置。
图 21
(2)打开"Peripherals and Pin Mux"窗口查看外设配置。
图 22
(3)打开"Clocks"窗口查看时钟配置。
图 23
(4)打开"PS DDR"窗口查看DDR配置。
图 24
(5)打开"AI"窗口查看NPU配置。
图 25
FSBL TD工程编译
请参考《TD-FD工程编译与加载》文档编译FSBL TD工程。
图 26
生成HPF文件
在FPSoC的应用开发过程中,需将硬件设计信息通过文件的形式传递至软件开发工具(FD)中使用,该文件被称之为HPF(Hardware Platform File)文件。
我司提供的HPF文件位于“4-软件资料LinuxFSBLfsbl-[版本号]hwbin”目录下,下文演示HPF文件的生成。
在菜单栏中依次点击"Project -> Export Hardware Platform File"。
图 27
在弹窗内,勾选"Include bitstream",导出路径选择默认在当前工程内,点击OK。
图 28
弹窗显示导出HPF文件成功,并显示HPF文件的存放路径,点击"Ok"。
图 29
生成FSBL FD工程
我司提供的FSBL FD工程位于“4-软件资料LinuxFSBLfsbl-[版本号]swbaremetal_demoproject”目录下,下文演示FSBL FD工程的生成。打开FD软件,在Workspace中指定工程存放路径,点击"Launch"。Workspace是FD的工作目录,该目录下包含了Platform工程、app工程以及用户配置文件。
图 30
在菜单栏中依次点击"File -> New -> Platform Project",创建Platform工程。
图 31
在弹出的对话框中,根据实际情况设置Project Name(工程名),"HPF File"选择刚刚导出的HPF文件所在路径,点击"Finish"生成Platform工程。
图 32
至此,创建Platform工程完成。
图 33
在菜单栏中依次点击"File -> New -> Application Project",创建FSBL FD工程。
图 34
在弹出的对话框中,根据实际情况设置Project Name(工程名),"Template List"选择"FSBL",点击"Finish"生成FSBL FD工程。FSBL FD工程即为app工程,其主要功能为引导BOOT.bin中的数据和程序。
图 35
至此,已生成FSBL FD工程。
图 36
编译FSBL FD工程生成elf文件
我司提供的elf文件位于“4-软件资料LinuxFSBLfsbl-[版本号]swbaremetal_demobin”目录下,可直接使用。
本小节演示elf文件的生成。鼠标右键FSBL工程,选择"Reset Project"。
图 37
点击"Reset"。
图 38
点击"Close"。
图 39
在菜单栏中依次点击"Project -> Build All",编译FSBL FD工程。
图 40
编译完成,并在fsblgon工程的build目录下生成fsbl.elf文件。fsbl.elf需与u-boot.bin文件合成BOOT.bin使用。
图 41
图 42
U-Boot开发
U-Boot为二级Bootloader程序。
U-Boot源码说明
U-Boot源码位于LinuxSDK源码u-boot目录,具体说明如下表。

图 43
U-Boot配置
U-Boot可使用menuconfig进行配置,请参考“配置内核选项”章节,配置menuconfconfig所需依赖环境。
在LinuxSDK源码目录下,执行如下命令,通过menuconfig配置U-Boot。
Host#cd /home/tronlong/DR1/SDK_2025.1/
Host#./build.sh ubootmenuconfig
图 44
图 45
可通过键盘的方向键选中对应菜单栏。在被选中的情况下,可按Enter键进入子菜单。菜单选项中蓝色高亮的字母代表此菜单选项的快捷键,可在键盘上按下对应的字母快速选中对应的菜单选项。 每个菜单选项前的括号内容表示当前菜单选项的配置状态。选中对应的菜单选项后,按下Y键,会将相应的选项配置编译到U-Boot中,同时菜单选项前面变为< * >。按下N键,不会将相应的选项配置编译到U-Boot中。如需搜索,可按下/键打开搜索框,然后输入要搜索的内容。配置完毕后,选中,按Enter键保存配置选项。然后选中,按Enter键退出。 图 46 编译U-Boot在LinuxSDK源码目录下执行如下命令,配置编译选项,并单独编译U-Boot。Host# ./build.sh uboot 图 47 图 48 编译完成后,最终在LinuxSDK源码"device/output/anlogic_dr1m90/u-boot"目录下生成U-Boot镜像如下所示。 图 49 合成BOOT.bin文件BOOT.bin由fsbl.elf和u-boot.bin合成。fsbl.elf文件位于产品资料“4-软件资料LinuxFSBLfsbl-[版本号]swbaremetal_demobin”目录下,u-boot.bin文件位于“4-软件资料LinuxU-Bootimageu-boot-2021.01-[版本号]-[Git序列号]”目录下,可直接使用。备注:版本号、Git序列号请以实际情况为准。打开FSBL FD工程,在菜单栏中依次点击"Tools -> Create Boot lmage"。 图 50 图 51 "Output BlF file path"为output.bif存放路径,"Output path"为BOOT.bin存放路径,请根据实际路径进行选择。在"Boot image partitions"中点击"Add"选择和配置需要被打包到Boot.bin的分区文件,本次以添加FSBL镜像fsbl.elf和U-Boot镜像u-boot.bin为例进行演示,配置参数如下图。 图 52 图 53 图 54 配置完成,点击"Create lmage",生成BOOT.bin文件。 图 55 图 56 替换BOOT.bin文件通过Linux系统启动卡替换将Linux系统启动卡通过读卡器连接至PC机,直接替换Linux系统启动卡BOOT分区的BOOT.bin原文件即可。 图 57 通过命令行替换请将需替换的BOOT.bin文件拷贝至评估板文件系统的任意目录下,执行如下命令替换BOOT.bin文件至Linux系统启动卡。Target# cp ./BOOT.bin /mnt/mmcblk0p1/BOOT.bin备注:如需替换BOOT.bin至eMMC,请将设备节点修改为"/mnt/mmcblk1p1"。 图 58 U-Boot使用说明U-Boot命令行进入方式评估板上电启动后,在U-Boot倒计时结束之前按下"Ctrl + C"进入U-Boot命令行模式。环境变量说明(1)环境变量存储执行命令"setenv"或"env default -f -a"修改的是运行空间中的环境变量值,须使用"saveenv"命令将修改后的环境变量保存起来。否则U-Boot重启后,将会使用修改前的环境变量值。环境变量修改完成后,执行reset命令,即可使用修改后的U-Boot环境变量启动。U-Boot# env default -f -aU-Boot# saveenvU-Boot# reset 图 59 (2)默认配置信息在U-Boot命令行执行"printenv"命令可查看环境变量。不同版本的U-Boot,环境变量可能会有所不同,内容仅供参考。U-Boot# printenv 图 60 图 61 (3)环境变量说明关键环境变量说明如下。 /* 架构、CPU和板卡信息 */arch=armcpu=armv8soc=dr1m90board=evb_dr1m90board_name=evb_dr1m90vendor=anlogic /* 串口控制台和波特率设置 */baudrate=115200stderr=serial@f8401000stdin=serial@f8401000stdout=serial@f8401000 /* 网络配置 */ipaddr=192.168.199.138netmask=255.255.255.0serverip=192.168.199.114 /* 内核和设备树加载地址 */fdt_addr_r=0x18000000kernel_addr_r=0x10000000 /* 内核和设备树文件名 */kernel_image=kernel.bindevicetree_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_bootbootcmd_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参数传递Kernel参数传递指的是在启动内核时,通过特定机制将配置参数或启动选项传递给内核,以控制其初始化行为、硬件配置、运行模式等。评估板默认参数如下。 bootargs 'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait' 参数解析:
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !