Vitis部分实验记录

环境

Ubuntu18.04
Vitis2020.1

1 ARM裸机输出hello world

前提:FPGA工程师已完成Vivado硬件设计部分(XSA)
按照course_s2的1.3部分创建vitis工程, 工程包含两个部分,一个是硬件平台工程(由FPGA工程师完成),另一个部分为APP工程(由软件工程师完成)。
Vitis最好是根据不同的项目新建不同的工作空间,以免造成工程混乱。

1.1 硬件平台工程

硬件平台工程需要关注platform.spr文件,文件里面主要包含fsbl(first stage boot loader)以及APP工程的BSP(Board Support Package)。
修改BSP时需要对硬件平台工程进行Build Project。

1.2 APP工程

修改代码后需要对APP工程进行Build Project。

1.3测试

1.3.1 JTAG模式

方便调试用,可以通过IDE直接显示结果。
JTAG模式

1.3.2 SD卡模式

可以将程序挂载至SD卡执行。
后缀bin和BIN无影响,上电可以观察结果。
在这里插入图片描述

1.3.3 QSPI模式

即烧写到FLASH运行。
移除SD卡,上电可以观察到结果。
在这里插入图片描述

2 PS端以太网测试(基于lwip)

基于cource_s2的第九章教程
由于没有DHCP路由器,例程中后续的收发没有办法测试,同时过程中遇到了问题(未解决)。

2.1 问题

第一次测试时触发了设置默认IP,但是实际测试收发时并无接收。后续测试时都无法再次触发设置默认IP。
注意到终端提示了警告:

WARNING: Not a Marvell or TI or Realtek Ethernet PHY. Please verify the initialization sequence
Start PHY autonegotiation 
Waiting for PHY to complete autonegotiation.
autonegotiation complete 
link speed for phy address 1: 0

经过搜索发现可能是底层的驱动不能够对该款芯片进行速度读取,但是实际尝试了设置BSP中lwip中phy_link_speed参数,将默认的自动适配更改为100Mbps。修改之后确实可以触发设置默认IP,但是以太网的连接却出现了反复link down和link up的情况。暂时无法解决。

3 Petalinux编译

参考course_s3的第一章
关键在于1.2中的编译部分,编译需要连接GitHub下载一些源代码,效率不是很高。因此需要配置离线编译。

3.1 离线编译

离线编译可以参考我的另一篇博客

4 Petalinux以太网测试

Petalinux本质上是linux系统,因此可以通过linux命令行来执行相应的操作。

4.1Petalinux修改以太网IP地址以及子网掩码

 ifconfig eth0 192.168.1.10 netmask 255.255.255.0

4.2 主机IP设置

修改Petalinux的IP以及netmask后,主机以太网的IP地址等也要手动修改。
以win10为例,【控制面板】→【网络和Internet】→【网络连接】,右键以太网,属性,找到internet协议版本4,属性,使用下面的IP地址

IP地址:192.168.1.20
子网掩码:255.255.255.0
默认网关:192.168.1.1

4.3 ping测试

开发板连接JTAG、UART、电源线,网线一端接开发板的网线端口,另一端接主机。

4.3.1 主机端

ping 192.168.1.10

主机端可以正常ping通开发板端

4.3.2 开发板端

开发板端ping通主机端前还需要对主机进行防火墙规则设置,否则无法ping通。方法可以参考这篇博客

ping 192.168.1.20

开发板端可以正常ping通主机端
互ping测试

5 Vitis AI部分

主要参考Vitis-AI基础-V1.2.4.pdf的第二章
流程中分析网络参数的部分存在目录对应不上的问题,实际上是在例程的 /Compile_Tools/modle/vehicle/pb_file 文件夹里面
网络参数分析

5.1 推理部分

教程当中文件的传输应该是使用了NFS,由于没有使用DHCP的路由器,因此选择了手动拷贝的方式拷贝到目标板上。petalinux经过测试只能识别FAT32文件系统的U盘,所以需要准备FAT32文件系统的U盘以拷贝Alinx_DNN文件夹。不过需要注意FAT32不能拷贝太大的文件(听说是4GB),对于Alinx_DNN足够

5.1.1 拷贝Alinx_DNN文件夹

拷贝Alinx_DNN文件夹到U盘根目录,插入U盘到目标板
输入命令(目标板系统用户已经是root,所以省略sudo

fdisk -l

由输出观察到设备名称为/dev/sda1,接下来将U盘挂载到/mnt文件夹下

mount /dev/sda1 /mnt

cd至mnt文件夹后,将Alinx_DNN文件夹复制到目标板上,这里我复制到/home下

cp -r Alinx_DNN/ /home/

待Alinx_DNN文件夹复制完成后,cd到/home下的Alinx_DNN文件夹,按照教程完成DNNDK工具的安装

PS:这里记一下取消挂载U盘的命令

umount /mnt/

5.1.2 运行推理程序

进入任意一个推理例程,由于没有摄像头,因此只能运行图片组输入的测试程序。
以火焰识别为例:
运行图片组输入测试程序过程中遇到can not open display的警告,此时发现程序运行结束,输出目录output_result的子文件夹中并没有包含任何文件。
分析测试文件的源码,发现里面有显示图片的代码,由于没有显示器或者视频输出的转接线,因此这部分其实是不需要的,只需要将检测结果的图片进行保存。因此把显示图片的代码注释掉即可(同时也要把修改过后的代码文件拷贝到目标板上
注释掉显示图片的代码
重新运行推理程序,警告消失,程序成功运行,将输出结果拷贝至U盘(我这里只拷贝了output_result里面的carfire3)

cp -r carfire3/ /mnt/

同步

sync /mnt/

取消挂载U盘

umount /mnt/

观察推理结果,这里我只选取了一张图片
推理结果

5.1.3 可能遇到的问题

1.取消挂载时出现了umount: /mnt: device is busy
原因是因为有程序在使用 /mnt 目录,我们可以使用 fuser 命令查看挂载目录被哪些进程占用。fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息。运行以下命令

fuser -kvm /mnt    #-k自动把霸占着/mnt/的程序杀死  #-m后面跟挂载点  #-v指输出详细信息

2.保存到U盘的图片大小为0:
通过命令查看目标板上推理结果的图片文件的大小(以carfire3里面编号为00058的图片为例)

stat img00058.jpg

可以观察到生成的推理图像大小是没问题的
问题出在没有执行同步

sync /mnt/

以及正确取消挂载U盘

umount /mnt/

参考:
https://www.cnblogs.com/jszd/p/11325238.html
https://m.php.cn/article/467502.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值