移植VMK180 TRD的PetaLinux工程

1
概述
所有工具和参考设计使用2021.2。x86编译主机的操作系统是ubuntu 18.04.6 lts。编译记录里的井号,由于和markdown语法有冲突,把超过3个以上的连续井号全部替换成了星号。有些软件打印的记录非常长,于是把其中部分内容替换成了“……”。
硬件移植和axi interrupt controller的设备树工作由赛灵思工程师季茂林完成。
2
petalinux工程
2.1. vmk180 trd的petalinux工程 
直接编译vmk180-trd/petalinux/xilinx-vmk180-trd中的vmk180 trd的petalinux工程,能成功编译。
2.2. vmk180 trd xsa的petalinux工程 
从vmk180 trd带的xsa文件:
(vmk180-trd/platforms/vivado/vmk180_trd/project/vmk180_trd.xsa)
创建petalinux工程,直接编译,会出错,部分错误信息如下:
error: error executing a python function in exec_python_func() autogenerated:
the stack trace of python calls that resulted in this exception/failure was: 
file: 'exec_python_func() autogenerated', lineno: 2, function: 
     0001: 
 *** 0002:devicetree_do_compile(d) 
     0003: 
file: '/proj/hankf/v212/vmk180-trd/vmk180-trd-xsa-peta/components/yocto/layers/core/meta/classes/devicetree.bbclass', lineno: 131, function: devicetree_do_compile 
     0127:            if not(os.path.isfile(dtspath)) or not(dts.endswith(.dts) or devicetree_source_is_overlay(dtspath)): 
     0128:                continue # skip non-.dts files and non-overlay files 
     0129:        except: 
     0130:            continue # skip if can't determine if overlay 
 *** 0131:        devicetree_compile(dtspath, includes, d) 
     0132:} 
     0133: 
     0134:devicetree_do_install() { 
     0135:    for dtb_file in `ls *.dtb *.dtbo`; do 
..................... 
'/proj/hankf/v212/vmk180-trd/vmk180-trd-xsa-peta/build/tmp/work/versal_generic-xilinx-linux/device-tree/xilinx-v2021.2+gitautoinc+c0acd8f064-r0', '-o', 'system-top.dtb', '-i', 'dts', '-o', 'dtb', 'system-top.dts.pp']' returned non-zero exit status 2.
subprocess output: 
/proj/hankf/v212/vmk180-trd/vmk180-trd-xsa-peta/project-spec/configs/../../components/plnx_workspace/device-tree/device-tree/pl.dtsi error (phandle_references): /amba_pl@0/mipi_csi2_rx_subsystem@a4060000/ports/port@1/endpoint: reference to non-existent node or label mipi_capture_pipe_cap_pipe_isppipeline_accel_0mipi_capture_pipe_mipi_csi_rx_ss_mipi_csi2_rx_subsyst_0
error: input tree has errors, aborting (use -f to force output)
debug: python function devicetree_do_compile finished
把文件system-user.dtsi做下列更改后,才能编译通过。
/include/ system-conf.dtsi 
/// { 
//};
/delete-node/ &axi_intc_0; 
/delete-node/ &mipi_csirx_outmipi_capture_pipe_mipi_csi_rx_ss_mipi_csi2_rx_subsyst_0;
/ { 
 amba_pl: amba_pl@0 { 
  axi_intc_0: interrupt-controller@a42e0000 { 
   interrupt-names = irq; 
   interrupt-parent = ; 
   interrupts = ; 
  }; 
 }; 
};
2.3. vck190 xsa的petalinux工程 
把vmk180 trd的工程,移植到vck190,再根据导出的xsa创建petalinux工程,也需要做上述更改,才能成功编译petalinux工程。
2.4. 移植vmk180 trd的petalinux工程 
直接在vmk180 trd的petalinux工程,导入上述vck190的xsa(移植到vck190的vmk180 trd的xsa),能成功编译petalinux工程。
2.5. 基于vmk180 trd的bsp的petalinux工程 
把vmk180 trd的petalinux工程打包成bsp,再创建petalinux工程,并导入上述vck190的xsa(移植到vck190的vmk180 trd的xsa),能成功编译。
3
x86-host软件编译
3.1. libaio.h 
编译 vmk180-trd/pcie_host_package/qdma/apps/dma-util 时,得到错误“libaio.h: no such file or directory”。
cc -g -i. -i../include -i../dma-utils  -c -std=c99 -o ../dma-utils/dmaxfer.o ../dma-utils/dmaxfer.c -d_file_offset_bits=64 -d_gnu_source -d_large_file_source -d_aio_aix_source 
../dma-utils/dmaxfer.c10: fatal error: libaio.h: no such file or directory 
 #include  
          ^~~~~~~~~~ 
compilation terminated. 
makefile recipe for target '../dma-utils/dmaxfer.o' failed
安装libaio1和libaio-dev,再编译就能能成功。
/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app$ sudo apt install libaio1 libaio-dev 
reading package lists... done 
building dependency tree        
reading state information... done 
the following packages were automatically installed and are no longer required: 
  linux-hwe-5.4-headers-5.4.0-90 linux-hwe-5.4-headers-5.4.0-91 linux-hwe-5.4-headers-5.4.0-92 linux-hwe-5.4-headers-5.4.0-94 
use 'sudo apt autoremove' to remove them. 
the following new packages will be installed: 
  libaio-dev libaio1 
0 upgraded, 2 newly installed, 0 to remove and 18 not upgraded. 
need to get 19.3 kb of archives. 
after this operation, 87.0 kb of additional disk space will be used. 
get:1 http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 libaio1 amd64 0.3.110-5ubuntu0.1 [6,476 b] 
get:2 http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 libaio-dev amd64 0.3.110-5ubuntu0.1 [12.8 kb] 
fetched 19.3 kb in 1s (13.1 kb/s)       
selecting previously unselected package libaio1:amd64. 
(reading database ... 383659 files and directories currently installed.) 
preparing to unpack .../libaio1_0.3.110-5ubuntu0.1_amd64.deb ... 
unpacking libaio1:amd64 (0.3.110-5ubuntu0.1) ... 
selecting previously unselected package libaio-dev:amd64. 
preparing to unpack .../libaio-dev_0.3.110-5ubuntu0.1_amd64.deb ... 
unpacking libaio-dev:amd64 (0.3.110-5ubuntu0.1) ... 
setting up libaio1:amd64 (0.3.110-5ubuntu0.1) ... 
setting up libaio-dev:amd64 (0.3.110-5ubuntu0.1) ... 
processing triggers for man-db (2.8.3-2ubuntu0.1) ... 
processing triggers for libc-bin (2.27-3ubuntu1.4) ...
3.2. pf src ‘.tmp_30090’: permission denied 
编译qdma驱动时,得到错误“mkdir: cannot create directory ‘.tmp_30090’: permission denied”。
make  -c driver 
make[1]: entering directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver' 
distro=, dmajor= dminor=  
5.4.1575.4.0-96-generic: git,,, -dgitsp -dgit 
cross_compile_flag = aarch64-linux-gnu-. 
arch = x86_64. 
rm: cannot remove '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src/libqdma': is a directory 
ln: /proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src/libqdma: cannot overwrite directory 
*********************** 
**** pf src          **** 
*********************** 
make[2]: entering directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src' 
srcdir = /proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src. 
ksrc = /lib/modules/5.4.0-96-generic/build. 
vf = 0. 
cross_compile_flag = aarch64-linux-gnu-. 
arch = x86_64. 
extra_flags = . 
ccflags-y = -d__read_once_defined__. 
make[3]: entering directory '/usr/src/linux-headers-5.4.0-96-generic' 
mkdir: cannot create directory ‘.tmp_30090’: permission denied 
mkdir: cannot create directory ‘.tmp_30092’: permission denied 
............
把所有文件的所有者改为当前用户,编译也有错误。
/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app$ whoami 
hankf 
/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app$ sudo chown -r  hankf  *
/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app$ make clean 
*********************** 
****  apps         **** 
*********************** 
make -c apps clean; 
............
/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app$ make  
*********************** 
****  apps        **** 
*********************** 
make -c apps 
make[1]: entering directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/apps' 
***************************** 
****  dma-from-device    **** 
***************************** 
make -c dma-from-device clean; 
make[2]: entering directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/apps/dma-from-device' 
rm -rf *.o *.bin dma-from-device 
make[2]: leaving directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/apps/dma-from-device' 
............ 
make[3]: entering directory '/usr/src/linux-headers-5.4.0-96-generic' 
mkdir: cannot create directory ‘.tmp_34383’: permission denied 
mkdir: cannot create directory ‘.tmp_34385’: permission denied 
..........
使用sudo命令,以root权限编译,能编译成功。
/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app$ sudo make  
*********************** 
****  apps        **** 
*********************** 
make -c apps 
make[1]: entering directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/apps' 
***************************** 
****  dma-from-device    **** 
***************************** 
make -c dma-from-device clean; 
make[2]: entering directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/apps/dma-from-device' 
rm -rf *.o *.bin dma-from-device 
make[2]: leaving directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/apps/dma-from-device' 
................... 
srcdir = /proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src. 
ksrc = /lib/modules/5.4.0-96-generic/build. 
vf = 1. 
cross_compile_flag = . 
arch = x86_64. 
extra_flags = -d__qdma_vf__. 
ccflags-y = -d__read_once_defined__. 
  building modules, stage 2. 
  modpost 1 modules 
  cc [m]  /proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src/qdma-vf.mod.o 
  ld [m]  /proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src/qdma-vf.ko 
make[3]: leaving directory '/usr/src/linux-headers-5.4.0-96-generic' 
make[2]: leaving directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver/src' 
make[1]: leaving directory '/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/driver'
3.3. build host application pcie_app 
编译应用程序pcie_app,得到错误“undefined reference to cv::namedwindow”。
/proj/hankf/vck190/v212/vck190-from-vmk180-trd-bsp-peta/project-spec/qdma-x86-host-app/pcie_app$ ./do_compile.sh  
g++ -wl,-o1 -o app1 main.o mainwindow.o videofrm.o pcie_host.o moc_mainwindow.o moc_videofrm.o   -l/usr/lib -l/usr/lib/x86_64-linux-gnu/glib-2.0 -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_imgcodecs -lrt -lglib-2.0 -lqt5widgets -lqt5gui -lqt5concurrent -lqt5core -lgl -lpthread  
videofrm.o: in function `videofrm::config_frame()': 
videofrm.cpp undefined reference to `cv::basic_string const&, int)' 
videofrm.o: in function `videofrm::convert_yuv_to_rgb_buffer(unsigned char*, unsigned char*, unsigned int, unsigned int)': 
videofrm.cpp undefined reference to `cv::basic_string const&,cv::_inputarray const&)' 
collect2: error: ld returned 1 exit status 
makefile recipe for target 'app1' failed 
make: *** [app1] error 1 
mv: cannot stat 'app1': no such file or directory
使用命令pkg-config opencv –cflags –libs,查看opencv相关库的编译选项,并加入makefile,能编译成功。
/proj/hankf/vmk180/v212/vmk180-trd$ pkg-config opencv --cflags --libs | grep -i gui 
-i/usr/local/include/opencv -i/usr/local/include -l/usr/local/lib -lopencv_dnn -lopencv_highgui -lopencv_ml -lopencv_objdetect -1
原文标题:开发者分享|移植vmk180 trd到vck190的软件编译问题
文章出处:【微信公众号:xilinx开发者社区】欢迎添加关注!文章转载请注明出处。


自动驾驶汽车的关键元件是什么
0-15V/5A的可调电源电路图
智慧城市的发展有多需要5G技术
直流电源和交流电源有什么区别
如何避过测量电源波纹的误区?
移植VMK180 TRD的PetaLinux工程
格力电器董明珠表示格力手机一定会成功
德国智能制造成经济增长新亮点,中国制造2025全面提升制造业竞争力
中美自动驾驶汽车监管对比,拿什么保障安全与责任?
索尼WI-1000XM2国行版发布 售价2499元
影响SMT组装产品质量的原因及提高SMT装配质量的有效措施
Amkor Technology看重中国封装测试市场
感恩节送啥?当贝D3X投影仪、按摩椅等这份用心礼物单请收下
基于通信芯片SI4432和μC/OS-II操作系统实现无线通信系统的设计
记一次由窗函数引发的问题
使用拉力试验机时需要注意哪些问题
币圈及时通讯系统,币圈直播聊天系统开发,数字资产抵押平台开发
合肥发布“微显示产业生态链建设方案”,打造新型微显示产业生态集群
什么是热保护器?热保护器的工作原理是什么?
IPM门极驱动隔离电路