基于Vitis和Petalinux的嵌入式Linux+FPGA开发操作笔记v0.1

相关说明:

Xilinx在2019年及以前用的都是vivado+SDK工具,2019年以后用的是Vitis+vivado,petalinux是Linux下的方便配置、建立、编译、生成必要文件的工具,Vitis有Windows和Linux端,windows端可以理解成以前的SDK,Linux端也是一个用来做嵌入式应用层开发的工具,可以帮助你不需要写makefile文件来编译生成.elf文件,但有时候代码中新增了一些库时,需要再链接一下动态库,否则编译会报错

裸机Vitis开发

创建vivado工程--勾选生成子目录--勾上不指定源文件--创建块设计--命名最好是system--选好DDR后注意看原理图中的电压--…(与vivado_SDK操作类似)--file--export--export Hardware--有PL包含bit流--在工程下新建一个vitis文件夹来存放XSA文件(硬件组件文件,包含了配置、外设、初始化等)--tools--launch vitis IDE--文件夹选择刚刚的vitis文件夹--启动--create a new platform from hardware(XSA)--路径选择刚刚的vitis下的.xsa文件--下一步--命名--选择处理器--next--OS可选standlone(裸机)和freertos(实时系统)

PetaLinux设计流程

1.创建vivado硬件平台,导出xsa文件到ubuntu中

把vivado工程生成的xsa文件拷贝到共享文件夹

2.设置petalinux环境变量

在Ubuntu终端中输入命令来开启petalinux功能(可以参考Xilinx官方文档,我建议可以学正点原子的教程把官方命令缩成sptl)

3.创建petalinux工程

在用户目录下新建一个文件夹用于保存以后所有的工程

mkdir petalinux

创建zynq模板的工程命名为Zynq_7020

petalinux-create -t project --template zynq -n Zynq_7020

4.配置petalinux工程

得到硬件描述语言并指定文件路径

petalinux-config --get-hw-description /mnt/hgfs/share/7020_xsa/system_wrapper.xsa

此时会弹出图形化操作界面,想修改或确认某一项可通过回车键进入,Y选中方括号,N取消选中,上下左右选择移动,也可以根据首字母按对应的按键,有重复的多按几次。

Linux Components Selection里面要选中first stage bootloader和auto update ps_init,u-boot默认即可(u-boot-xlnx)。

subsystem AUTO hardware settings里面主要是一些硬件外设,进入串口,把默认的两个ps7_uart_1都修改成0。(这里是针对领航者的开发板,如果是其他开发板就看PS端的串口是0还是1,选择PS端对应的串口号即可)

5.配置linux内核(20min)

 在存放工程的文件夹下(Zynq_7020)输入petalinux-config -c kernel编译内核

6.配置根文件系统

在存放工程的文件夹下(Zynq_7020)输入petalinux-config -c rootfs--image features--选中auto-login--这样进入Linux后会自动登录

7.配置设备树文件

在存放工程的文件夹下(Zynq_7020)输入code project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi可打开

这里大家一般买开发板时商家会提供他们的设备树,只要你不改变接口,设备树一般可以不动,需要增减接口时,再去修改设备树即可。

8.编译工程(第一次编译需要2h左右)

在存放工程的文件夹下(Zynq_7020)输入petalinux-build编译工程

9.打包生成BOOT.BIN文件

在存放工程的文件夹下(Zynq_7020)输入petalinux-package --boot --fpga --u-boot --fsbl,会将fsbl、bit流、u-boot、设备树二进制dtb文件打包成一个BOOT.BIN,打包后的文件在工程文件夹的images/linux下。

选项“--fsbl”用于指定fsbl文件所在位置,后面接文件对应的路径信息,如果不指定文件位置,默认对应的是images/linux/zynq_fsbl.elf;选项“--fpga”用于指定bitstream文件所在位置,后面接该文件对应的路径信息,默认对应的是 images/linux/system.bit,实际可能有区别;选项“--u-boot”用于指定U-Boot文件所在位置,后面接该文件所在路径信默认为images/linux/u-boot.elf。这里均没有指定对应的文件的路径信息,那么 Petalinux 会自动使用默认文件。

基于Vitis的Linux应用开发

1.创建基于vitis的linux平台工程

在Ubuntu中打开vitis软件--路径放在/home/book/workspace/linux_app/HelloWorld--launch--create platform project--工程平台名一般写开发板对应的型号zynq-7020--XSA文件选共享文件夹下的那个--操作系统选linux--处理器选A9--取消勾选generate boot components--finish--工程平台创建完成

配置工程平台--linux on ps7_cortexa9--把与BOOT相关的文件复制到共享文件夹--回到Ubuntu浏览Bif文件的路径--选择刚刚拷贝的.bif文件--浏览boot组件目录的路径--选择刚刚拷贝的linux_boot文件夹open--点击左上角的锤子来编译工程

说明:bif文件是vitis的启动镜像依赖文件,boot路径是用来找依赖文件的目录

注意:平台工程建立好后务必对平台工程编译一次,否则后面直接编译C/C++程序时会报错

2.创建Linux应用工程

在vitis中--file--new--application project--两个next--填写应用工程名(这里用HelloWorld)--两个next--选择模板--finish--右击左侧顶层工程目录(HelloWorld_system)--build project编译工程

编译生成的文件在~/workspace/linux_app/HelloWorld/HelloWorld/Debug下的.elf文件

3.在开发板上调试应用

Ubuntu和开发板相互ping通--连接电脑和开发板的网口--在VMware左上角player管理点击虚拟机设置(ctrl+D)--网络适配器选择桥接模式并确定--配置Ubuntu静态IP地址--这次用图形化界面来配置--Ubuntu中点击设置--network--点击wired右边的+号--IPv4--选择manual--地址192.168.1.10--子网掩码255.255.255.0--Add--一定要点apply--配好后可在终端ifconfig看看--配置开发板静态IP地址--开发板上电并打开串口--在串口中输入ifconfig eth0 192.168.1.20 netmask 255.255.255.0--再相互ping

     TCF Agent方式--右击工程目录--run as--run configurations--双击system project debug--点击Linux TCF Agent右边的new--目标名一般写开发板的名字--Host输入开发板的IP地址192.168.1.20--端口默认测试连接并OK--apply--run

     NFS方式--在串口中mount -t nfs -o nolock 192.168.1.10:/home/book/workspace/nfs /mnt即把Ubuntu的nfs目录挂载到开发板的mnt目录下(跟share一样的)--把Ubuntu中的.elf文件复制到与开发板共享的目录下cp HelloWorld.elf /home/book/workspace/nfs--这样就可以直接在串口下执行.elf文件了./HelloWorld.elf

  SSH方式(安全保密)--在Ubuntu下scp /home/book/workspace/nfs/hello_world.elf root@192.168.1.20:/home/root(把.elf文件加密拷贝到名为root地址为1.20的开发板的root目录下)--如果拷贝出错就把Ubuntu的~/.ssh目录下的known host文件删掉--输入开发板的登录密码root--然后在串口中进到root目录下执行.elf文件即可(cd后默认回到root)

     FTP方式--在filezilla中创建开发板站点来传输文件

4.应用为什么可以在开发板上运行

在Ubuntu中输入uname -a查看Ubuntu的系统架构,Ubuntu用的是x86_64位架构,而开发板用的是ARM_v7架构,不同架构之间编译的程序为什么可以运行呢--因为交叉编译工具链的使用(vitis自带)

Petalinux构建Qt和OpenCV交叉编译开发环境

1.定制根文件系统和编译SDK

Ubuntu终端进入petalinux/zynq_7020并sptl--petalinux-config -c rootfs--进入petalinux package--进入qt--选中qt和qt5--返回上级--进入opencv--选中opencv--返回上级进入python--选中python--返回保存配置--编译petalinux-build -c rootfs(之前用的petalinux-build是全编译,这里只编译rootfs)--构建SDK--先关闭网络使能防止编译出错petalinux-config取消网络--编译petalinux-build --sdk--生成的脚本在images/linux下的sdk.sh文件--执行脚本文件sudo ./sdk.sh--回车选择默认路径

2.配置交叉工具链

进入上面的路径cd /opt/pkg/petalinux/...--配置交叉编译环境source environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi--查看当前用来编译C语言的编译工具echo $CC--由于每次新开终端需要配置交叉编译环境很麻烦--修改文件vim ~/.bashrc--在最后一行加上. /opt/petalinux/2021.1/environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi保存退出--以后只需要执行source ~/.bashrc(每新开一个终端会自动执行bashrc文件,所以不需要每次都配置)

3.配置QT并搭建测试工程

下载QT5.14.2安装包在share文件下--进入share文件--sudo ./安装包名--勾选desktop gcc和source--安装在默认

配置编译器--打开QT--tools--options--compilers--Add--gcc--c--命名zynq_GCC--编译器路径选择/opt/petalinux/2020.2/sysroots/x86_64petalinux/usr/bin/arm-xilinx-linux-gnueabi/gcc后缀--Add--gcc--c++--命名zynq_G++--路径选择与上面一样的g++后缀的--apply

配置调试工具--debuggers--Add--命名zynq_Debugger--选择gdb后缀--apply

配置Qt Versions--Add--回到刚刚路径的上一级bin下面--qmake--命名把括号里面的system改成zynq

配置kits--Add--命名zynq--设备类型选generic Linux device--系统根目录选择2020.2下的sysroots目录--编译器、调试、Qt版本选择刚刚配置好的--apply--OK

搭建Qt测试工程--file--new file or project--application--Qt widgets application--choose--命名--路径默认--next*4--kits只勾选zynq--next--finish

测试工程--在QT画布里画好自己想要的并锤子--打开终端--编译后的可执行程序在用户目录下的build-qt_test-zynq-Debug/qt_test--这个文件就是要在开发板上跑的--再开个终端--cd petalinux/Zynq-display--sptl--petalinux-config--进入image packaging configuration--进入根文件系统类型--选择EXT4--进入device node of SD device--改成/dev/mmcblk0p2即从SD卡第二个分区启动(这里要看vivado的配置用的路径名)--保存返回--配置根文件系统petalinux-config -c rootfs--进入petalinux package groups--进入qt--选中qt和qt5--返回保存

上板测试--进入工程目录zynq-display那个--生成启动文件petalinux-package --boot --fsbl --fpga --u-boot --force--将“BOOT.bin”、“boot.scr”和“image.ub”三个文件复制到SD卡第一个分区cp BOOT.BIN boot.scr image.ub /media/book/boot/--删除SD卡ext4分区原有内容sudo rm -rf 文件名--将工程中image/linux目录下根文件系统rootfs.tar.gz解压到SD卡ext4分区sudo tar -xzf rootfs.tar.gz -C /media/book/boot/(实际路径要df -Th查看)--将qt_test复制到media/book/rootfs/home/root/中sudo cp qt_test /media/book/rootfs/home/root/--为确保文件传输都完成要sync一下--回到根目录卸载启动卡sudo umount /dev/sdb*

插卡上电--配置环境变量export QT_QPA_PLATFORM=linuxfb(如果用X11系统export DISPLAY=:0.0)--执行./qt_test

说明:

本文是学习正点原子ZYNQ的文档所做笔记,欢迎大家指正,感兴趣的也推荐看Xilinx和原子的文档教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值