赞
踩
Ubuntu18.04
Vitis2020.1
前提:FPGA工程师已完成Vivado硬件设计部分(XSA)
按照course_s2的1.3部分创建vitis工程, 工程包含两个部分,一个是硬件平台工程(由FPGA工程师完成),另一个部分为APP工程(由软件工程师完成)。
Vitis最好是根据不同的项目新建不同的工作空间,以免造成工程混乱。
硬件平台工程需要关注platform.spr文件,文件里面主要包含fsbl(first stage boot loader)以及APP工程的BSP(Board Support Package)。
修改BSP时需要对硬件平台工程进行Build Project。
修改代码后需要对APP工程进行Build Project。
方便调试用,可以通过IDE直接显示结果。
可以将程序挂载至SD卡执行。
后缀bin和BIN无影响,上电可以观察结果。
即烧写到FLASH运行。
移除SD卡,上电可以观察到结果。
基于cource_s2的第九章教程
由于没有DHCP路由器,例程中后续的收发没有办法测试,同时过程中遇到了问题(未解决)。
第一次测试时触发了设置默认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的情况。暂时无法解决。
参考course_s3的第一章
关键在于1.2中的编译部分,编译需要连接GitHub下载一些源代码,效率不是很高。因此需要配置离线编译。
离线编译可以参考我的另一篇博客
Petalinux本质上是linux系统,因此可以通过linux命令行来执行相应的操作。
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
修改Petalinux的IP以及netmask后,主机以太网的IP地址等也要手动修改。
以win10为例,【控制面板】→【网络和Internet】→【网络连接】,右键以太网,属性,找到internet协议版本4,属性,使用下面的IP地址
IP地址:192.168.1.20
子网掩码:255.255.255.0
默认网关:192.168.1.1
开发板连接JTAG、UART、电源线,网线一端接开发板的网线端口,另一端接主机。
ping 192.168.1.10
主机端可以正常ping通开发板端
开发板端ping通主机端前还需要对主机进行防火墙规则设置,否则无法ping通。方法可以参考这篇博客。
ping 192.168.1.20
开发板端可以正常ping通主机端
主要参考Vitis-AI基础-V1.2.4.pdf的第二章
流程中分析网络参数的部分存在目录对应不上的问题,实际上是在例程的 /Compile_Tools/modle/vehicle/pb_file 文件夹里面
教程当中文件的传输应该是使用了NFS,由于没有使用DHCP的路由器,因此选择了手动拷贝的方式拷贝到目标板上。petalinux经过测试只能识别FAT32文件系统的U盘,所以需要准备FAT32文件系统的U盘以拷贝Alinx_DNN文件夹。不过需要注意FAT32不能拷贝太大的文件(听说是4GB),对于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/
进入任意一个推理例程,由于没有摄像头,因此只能运行图片组输入的测试程序。
以火焰识别为例:
运行图片组输入测试程序过程中遇到can not open display的警告,此时发现程序运行结束,输出目录output_result的子文件夹中并没有包含任何文件。
分析测试文件的源码,发现里面有显示图片的代码,由于没有显示器或者视频输出的转接线,因此这部分其实是不需要的,只需要将检测结果的图片进行保存。因此把显示图片的代码注释掉即可(同时也要把修改过后的代码文件拷贝到目标板上)
重新运行推理程序,警告消失,程序成功运行,将输出结果拷贝至U盘(我这里只拷贝了output_result里面的carfire3)
cp -r carfire3/ /mnt/
同步
sync /mnt/
取消挂载U盘
umount /mnt/
观察推理结果,这里我只选取了一张图片
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。