[X]关闭

[米联客-XILINX-H3_CZ08_7100] LINUX基础篇连载-04 从vitis移植Ubuntu实现二次开发

文档创建者:LINUX课程
浏览次数:660
最后更新:2024-09-07
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-SOC » 2_LINUX应用开发
本帖最后由 LINUX课程 于 2024-9-11 11:00 编辑

软件版本:vitis2021.1(vivado2021.1)
操作系统:WIN10 64bit
硬件平台:适用XILINX Z7/ZU系列FPGA
登录“米联客”FPGA社区-www.uisrc.com视频课程、答疑解惑!

1 为什么使用vitis
说到这个问题,就不得不来讲讲Linux的启动逻辑了。ZYNQ MPSoC芯片的特点是,需要fsbl来引导uboot。fsbl全称为First Stage Boot Loader,是用户可以接触到的最早的启动部分。
细心观察应该可以发现,我们使用vitis跑裸机代码的时候,fsbl也发挥作用了,在程序运行前会打印fsbl的信息。而引导裸机和引导系统都需要fsbl文件,因此使用vitis则能加快我们的移植速度。
下图为一个典型启动流程例子:
image.jpg
除了fsbl外,vitis还会生成pmufw.elf和system_wrapper.bit这两个文件。pmufw.elf顾名思义就是pmu的管理程序,它负责了板级的电源管理。system_wrapper.bit文件则是FPGA端的配置文件,通过这个文件我们可以在Linux启动时将FPGA工程给一并配置至pl端,这样我们就能通过Linux与FPGA端交互了。此外bit文件不仅仅会配置pl端,ps端也需要通过bit文件设置,譬如没有设置gpio,那就算配置了设备树,在系统里依旧无法控制gpio。
要想让linux系统启动时配置好FPGA端的逻辑,首先我们得先导出在vivado里设计好的硬件,然后用vitis把它汇编成机器可以识别的bit文件,最后使用Linux下的工具包将其打包进BOOT.bin文件,也就是我们常说的uboot。
此外vitis还能生成丰富的设备树文件供我们参考。
2 通过TCL搭建工程
本工程提供了TCL文件方便搭建自己的工程,如果觉得麻烦可以选择直接使用工程构建,打开附带的zu_prj文件夹即可跳过本节。
首先通过菜单新建一个工程,展开File-Project-New,新建一个工程。
image.jpg
image.jpg
选择工程路径并命名工程:
image.jpg
选择工程类型,注意勾选的子选项:
image.jpg
选择芯片的型号:
image.jpg
米联客所采用的芯片型号有如下:
7010:xc7z010clg400-1
7015:xc7z015clg485-2
7020:xc7z020clg400-2(milianke 7x、7XA/B)、xc7z020clg484-2(702P)
7030:xc7z030ffg676-2
7035:xc7z035ffg676-2
7045:xc7z045ffg900-2(7100FC)、xc7z045ffg676-2(7035FA/B/C/D)
7100:xc7z100ffg900-2
检查所选的型号是否正确:
1726016869325.jpg
将{demo位置}/soc_tcl/uisrc放到新建工程目录下
image.jpg
为工程添加IP库,打开settings,选择IP下的Repository,使用加号添加上一步中的路径内的IP文件夹:
1726016907196.jpg
通过source {demo位置}/soc_tcl/system.tcl导入BD文件,注意路径要输入正确。TCL文件在demo中已经提供。
image.jpg
导入完成后:
image.jpg
在BD文件上右击,找到如下选项,创建顶层文件。
image.jpg
选择自动生成:
image.jpg
找到添加源的按钮,添加管脚约束:
1726017013691.jpg
选择第一个:
image.jpg
点击创建文件:
1726017247751.jpg
为约束文件创建名称:
image.jpg
创建完成后看到已经添加到列表里的,这时候就完成了。
image.jpg
打开刚刚新建的文件,将{demo位置}/soc_tcl/fpga_pin.xdc中的内容拷贝进来,按Ctrl+S保存。
image.jpg
可以看下关键参数的设置,这里需要注意不是每个板卡设置都一样
image.jpg
图片1.jpg
image.jpg
image.jpg
image.jpg
3 通过vivado导出硬件文件
FPGA需要自行开发生成自己想要的硬件电路,出厂配有一些简单的案例来帮助验证,详见附件第四章。
首先,对工程进行编译,点击生成比特按钮。
1726017400044.jpg
打开已经设计好的FPGA工程,依次展开File - Export - Export Hardware…
image.jpg
打开后为下图界面,点击Next>下一步:
image.jpg
选择包括比特文件这一选项,然后点击下一步:
image.jpg
这里是提醒在导出硬件文件前刷新比特文件,点击Yes:
image.jpg
选择导出位置,选择好后点击Finish开始导出:
image.jpg
打开导出文件夹,就能看到如下的硬件文件,以.xsa结尾:
image.jpg
4 从xsa构建Vitis工程
通过桌面快捷方式打开Vitis软件:
image.jpg
打开第一步就是选择工作路径,设置好合适的路径后点击Launch启动:
image.jpg
打开后是不是感觉很熟悉?没错其实这个就是我们熟悉的Eclipse IDE,写过Java的应该对这个IDE不陌生,但是我们这次不是拿它来写Java了,而是用它来编译c。点击左侧栏的小按键,打开编辑模式:
image.jpg
打开后的第一步并非创建工程,而是先给这个工程添加一个设备树模板,依次展开Xilinx - Repositories:
image.jpg
设备树模板可以使用Xilinx官方的,我们在附件中也提供了设备树,另外附上官方设备树模板的地址:https://github.com/Xilinx/device-tree-xlnx/releases
点击如图所示的New按键,找到设备树模板的目录,添加一个新的设备树模板:
image.jpg
选择好后,先Apply再Apply and Close:
image.jpg
添加好后,开始新建工程,依次展开File – New – Platform Project:
image.jpg
输入工程的名称,注意命名规范,然后点击下一步:
image.jpg
点击Browse找到刚刚生成的xsa文件,再如图设置其他参数,点击Finish完成设置:
1726017483216.jpg
稍等片刻等待工程初始化完成,在工程上右击选择Build Project开始编译:
image.jpg
等待控制台弹出完成的信息时,则代表我们需要的文件已经编译完毕:
1726017574375.jpg
打开工程所在目录,找到以下对应的三个文件,也就是我们之前说的所需文件:
文件的位置:
1726017613657.jpg
system_wrapper.bit:         {工程位置}\soc_sdk\soc_base\hw\
fsbl.elf:                                {工程位置}\soc_sdk\soc_base\export\soc_base\sw\soc_base\boot\
还记得我们上面所说的吗,这两个文件分别是PS和PL端的配置文件、FSBL启动文件。这样我们就得到了大部分的移植系统所需要的文件。
当然有了这些文件并不够,我们还差一个设备树文件,附件中已经提供了一个写好的设备树文件,或者也可以参照下图位置中Vitis给出的设备树进行一些小修改,注意此处不建议初学者自行修改,只需会使用即可:
1726017679588.jpg
5 使用工具包制作烧写系统
首先将system_wrapper.bit、fsbl.elf两个文件分别改名为system.bit、zynq_fsbl.elf,打开上一篇第3小节配置好的虚拟机,然后将system.bit、zynq_fsbl.elf两个文件拷贝到{解压目录}/uisrc-lab-xlnx/boards/mz7x/ubuntu/output/target,选择覆盖(第一次使用不会提示覆盖):
image.jpg
然后将soc_dts文件夹中的设备树文件,分别复制到:
{解压目录}/uisrc-lab-xlnx/sources/uboot/arch/arm/dts
{解压目录}/uisrc-lab-xlnx/sources/kernel/arch/arm/boot/dts
同样选择覆盖:
image.jpg
在scripts文件夹内右击,选择Open in Terminal:
image.jpg
然后我们就要开始使用脚本制作系统了,首先在/uisrc-lab-xlnx/scripts目录内打开终端,然后source配置一些环境变量:
image.jpg
分别输入:
make_uboot.sh用来制作uboot
make_kernel.sh用来制作Linux内核
create_image.sh用来制作镜像
然后插入TF卡准备烧写,分别执行:
make_parted.sh格式化并分区u盘,先输入盘符,再输入确认
deploy_image.sh烧写启动文件与系统文件,输入盘符
最后弹出TF卡:
image.jpg
7100FC 的SD卡启动是通过qspi进行引导的,而qspi则是通过JTAG进行烧录的。因此,第一步是对开发板的flash进行烧录。
将 SD 卡中的 BOOT 目录下的 BOOT.bin 文件和之前vitis生成的fsbl.elf(fsbl.elf 文件见4.4部分)也保存至“soc_sdk/soc_qspi”文件夹内。
image.jpg
连接硬件,拔卡在断电状态下插入jtag、串口,将核心板上拨码开关两位拨到on,插入电源准备开机。
拨码开关在板上的位置如下:
93359fd6bc6c90ac90c706df9fb2bda.jpg
JTAG如下连接。
image.jpg
打开vitis,选择附件中准备好的第四章的soc_sdk。该项目中已经设置好可以烧录的配置了。
image.jpg
在菜单栏找到Xilinx,选择烧录qspi:
image.jpg
烧录使用如下配置,其中BOOT.bin和fsbl.elf为之前保存在“{工程位置}/soc_sdk/soc_qspi”中的文件。
1726017881469.jpg
给板卡上电,点击program烧写:
image.jpg
image.jpg
板卡断电,先拔下jtag的usb数据线,再从板卡拔下jtag,插入sd卡,将核心板的拨码开关拨为qspi启动(ON-OFF),使用putty串口登录板卡。
启动界面。
image.jpg
输入run sdboot,启动sd卡内系统。
image.jpg
用户名:uisrc
密码:root
登录成功,页面如下。
image.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则