本帖最后由 LINUX课程 于 2024-9-11 11:00 编辑
软件版本:vitis2021.1(vivado2021.1) 操作系统:WIN10 64bit 硬件平台:适用XILINX Z7/ZU系列FPGA
1 为什么使用vitis 说到这个问题,就不得不来讲讲Linux的启动逻辑了。ZYNQ MPSoC芯片的特点是,需要fsbl来引导uboot。fsbl全称为First Stage Boot Loader,是用户可以接触到的最早的启动部分。 细心观察应该可以发现,我们使用vitis跑裸机代码的时候,fsbl也发挥作用了,在程序运行前会打印fsbl的信息。而引导裸机和引导系统都需要fsbl文件,因此使用vitis则能加快我们的移植速度。 下图为一个典型启动流程例子: 除了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,新建一个工程。 选择工程路径并命名工程: 选择工程类型,注意勾选的子选项: 选择芯片的型号: 米联客所采用的芯片型号有如下: 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 检查所选的型号是否正确: 将{demo位置}/soc_tcl/uisrc放到新建工程目录下 为工程添加IP库,打开settings,选择IP下的Repository,使用加号添加上一步中的路径内的IP文件夹: 通过source {demo位置}/soc_tcl/system.tcl导入BD文件,注意路径要输入正确。TCL文件在demo中已经提供。 导入完成后: 在BD文件上右击,找到如下选项,创建顶层文件。 选择自动生成: 找到添加源的按钮,添加管脚约束: 选择第一个: 点击创建文件: 为约束文件创建名称: 创建完成后看到已经添加到列表里的,这时候就完成了。 打开刚刚新建的文件,将{demo位置}/soc_tcl/fpga_pin.xdc中的内容拷贝进来,按Ctrl+S保存。 可以看下关键参数的设置,这里需要注意不是每个板卡设置都一样 3 通过vivado导出硬件文件 FPGA需要自行开发生成自己想要的硬件电路,出厂配有一些简单的案例来帮助验证,详见附件第四章。 首先,对工程进行编译,点击生成比特按钮。 打开已经设计好的FPGA工程,依次展开File - Export - Export Hardware… 打开后为下图界面,点击Next>下一步: 选择包括比特文件这一选项,然后点击下一步: 这里是提醒在导出硬件文件前刷新比特文件,点击Yes: 选择导出位置,选择好后点击Finish开始导出: 打开导出文件夹,就能看到如下的硬件文件,以.xsa结尾: 4 从xsa构建Vitis工程 通过桌面快捷方式打开Vitis软件: 打开第一步就是选择工作路径,设置好合适的路径后点击Launch启动: 打开后是不是感觉很熟悉?没错其实这个就是我们熟悉的Eclipse IDE,写过Java的应该对这个IDE不陌生,但是我们这次不是拿它来写Java了,而是用它来编译c。点击左侧栏的小按键,打开编辑模式: 打开后的第一步并非创建工程,而是先给这个工程添加一个设备树模板,依次展开Xilinx - Repositories: 点击如图所示的New按键,找到设备树模板的目录,添加一个新的设备树模板: 选择好后,先Apply再Apply and Close: 添加好后,开始新建工程,依次展开File – New – Platform Project: 输入工程的名称,注意命名规范,然后点击下一步: 点击Browse找到刚刚生成的xsa文件,再如图设置其他参数,点击Finish完成设置: 稍等片刻等待工程初始化完成,在工程上右击选择Build Project开始编译: 等待控制台弹出完成的信息时,则代表我们需要的文件已经编译完毕: 打开工程所在目录,找到以下对应的三个文件,也就是我们之前说的所需文件: 文件的位置: 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给出的设备树进行一些小修改,注意此处不建议初学者自行修改,只需会使用即可: 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,选择覆盖(第一次使用不会提示覆盖): 然后将soc_dts文件夹中的设备树文件,分别复制到: {解压目录}/uisrc-lab-xlnx/sources/uboot/arch/arm/dts {解压目录}/uisrc-lab-xlnx/sources/kernel/arch/arm/boot/dts 同样选择覆盖: 在scripts文件夹内右击,选择Open in Terminal: 然后我们就要开始使用脚本制作系统了,首先在/uisrc-lab-xlnx/scripts目录内打开终端,然后source配置一些环境变量: 分别输入: make_uboot.sh用来制作uboot make_kernel.sh用来制作Linux内核 create_image.sh用来制作镜像 然后插入TF卡准备烧写,分别执行: make_parted.sh格式化并分区u盘,先输入盘符,再输入确认 deploy_image.sh烧写启动文件与系统文件,输入盘符 最后弹出TF卡: 7100FC 的SD卡启动是通过qspi进行引导的,而qspi则是通过JTAG进行烧录的。因此,第一步是对开发板的flash进行烧录。 将 SD 卡中的 BOOT 目录下的 BOOT.bin 文件和之前vitis生成的fsbl.elf(fsbl.elf 文件见4.4部分)也保存至“soc_sdk/soc_qspi”文件夹内。 连接硬件,拔卡在断电状态下插入jtag、串口,将核心板上拨码开关两位拨到on,插入电源准备开机。 拨码开关在板上的位置如下: JTAG如下连接。 打开vitis,选择附件中准备好的第四章的soc_sdk。该项目中已经设置好可以烧录的配置了。 在菜单栏找到Xilinx,选择烧录qspi: 烧录使用如下配置,其中BOOT.bin和fsbl.elf为之前保存在“{工程位置}/soc_sdk/soc_qspi”中的文件。 给板卡上电,点击program烧写: 板卡断电,先拔下jtag的usb数据线,再从板卡拔下jtag,插入sd卡,将核心板的拨码开关拨为qspi启动(ON-OFF),使用putty串口登录板卡。 启动界面。 输入run sdboot,启动sd卡内系统。 用户名:uisrc 密码:root 登录成功,页面如下。 |