环境
参考设计: VCK190 Base TRD 2022.1 代码: https://github.com/Xilinx/vck190-base-trd 文档: https://xilinx.github.io/vck190-base-trd/2022.1/html/intro.html 工具版本: Vivado/Vitis 2022.1, PetaLinux 2022.1 开发板: VCK190 Production Version
编译
OS
强烈推荐使用Ubuntu 18.04、20.04。 请按照UG1144要求进行设置,和安装OS的软件包。
Shell
使用Bash作为system shell,不使用Dash。也就是“"/bin/sh"”应该指向bash。否则可能遇到错误"/bin/sh: 1: source: not found"。使用命令“sudo dpkg-reconfigure dash”更改。 更改Shell后,最好清除整个工程,然后从头编译。如果不清除整个工程,可能遇到错误,比如“cp: cannot stat 'aie/ip/libadf.a': No such file or directory”。
代码语言:javascript复制hankf@XSZGS4:vck190-base-trd-hdmirx-xvdpu$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Oct 19 2020 /bin/sh -> dash
hankf@XSZGS4:vck190-base-trd-hdmirx-xvdpu$ sudo dpkg-reconfigure dash
[sudo] password for hankf:
Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'
Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'
Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'
hankf@XSZGS4:vck190-base-trd-hdmirx-xvdpu$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug 30 09:03 /bin/sh -> bash
make命令
不能使用“make all”, 要使用下列命令。
代码语言:javascript复制make platform PFM=vck190_mipiRxSingle_hdmiTx
make overlay PFM=vck190_mipiRxSingle_hdmiTx OVERLAY=xvdpu
make sdcard PFM=vck190_mipiRxSingle_hdmiTx OVERLAY=xvdpu
建议使用脚本编译。下面是一个可以使用的脚本。
代码语言:javascript复制#!/bin/sh
# nohup
echo "Begin of script $0... " 2>&1 | tee -a $log_file
date_time=`date %0m
-%0k%0M`
date && date -u && date %s
hostname=`cat /etc/hostname`
export platform=vck190_mipiRxSingle_hdmiTx
export kernel=xvdpu
export log_file_dir=`pwd`
export log_file=$log_file_dir/$platform-$kernel-log-$hostname-$date_time.txt
rm -f $log_file
echo "log_file: $log_file"
echo "platform: $platform" 2>&1 | tee -a $log_file
echo "kernel: $kernel" 2>&1 | tee -a $log_file
export kernel_dir=overlays/$kernel/kernels
echo "kernel dir: $kernel_dir" 2>&1 | tee -a $log_file
export kernel_vivado_prj_dir=$kernel_dir/$kernel_combined/_x/link/vivado/vpl/prj/
echo "kernel vivado prj dir: $kernel_vivado_prj_dir" 2>&1 | tee -a $log_file
#Setup environment on GUUP server.
# ts 2022.1
# ts -petalinux 2022.1
which vivado 2>&1 | tee -a $log_file
which vitis 2>&1 | tee -a $log_file
which petalinux-build 2>&1 | tee -a $log_file
vivado_file=`which vivado`
echo $vivado_file 2>&1 | tee -a $log_file
if [ "$vivado_file" = "" ]; then
echo "Setup vivado environment." 2>&1 | tee -a $log_file
exit
fi
vitis_file=`which vitis`
echo $vitis_file 2>&1 | tee -a $log_file
if [ "$vitis_file" = "" ]; then
echo "Setup vitis environment." 2>&1 | tee -a $log_file
exit
fi
petalinux_build_file=`which petalinux-build`
echo $petalinux_build_file 2>&1 | tee -a $log_file
if [ "$petalinux_build_file" = "" ]; then
echo "Setup petalinux environment." 2>&1 | tee -a $log_file
exit
fi
pwd 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Step 1: clone.... " 2>&1 | tee -a $log_file
# vck190-base-trd clean repo: 1.8GB
# git clone failed sometimes. error:
# RPC failed; curl 56 GnuTLS recv error
# git clone --branch 2022.1 --recursive https://github.com/Xilinx/vck190-base-trd.git 2>&1 | tee -a $log_file
# use local copy instead "git clone"
echo "Step 1a: copy local repo.... " 2>&1 | tee -a $log_file
ls -l ../ 2>&1 | tee -a $log_file
ls -l ../vck190-base-trd-orig-0831/ 2>&1 | tee -a $log_file
if [ ! -d ../vck190-base-trd-orig-0831 ]; then
echo "No local repo of vck190-base-trd." 2>&1 | tee -a $log_file
exit
fi
cp -rd ../vck190-base-trd-orig-0831 vck190-base-trd 2>&1 | tee -a $log_file
ls -l 2>&1 | tee -a $log_file
du --max-depth=3 -h 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Enter work dir" 2>&1 | tee -a $log_file
cd vck190-base-trd
pwd 2>&1 | tee -a $log_file
export working_dir=`pwd`
echo "working_dir: $working_dir" 2>&1 | tee -a $log_file
ls -l 2>&1 | tee -a $log_file
echo "Step 1b: git clean repo.... " 2>&1 | tee -a $log_file
git checkout 2022.1
git clean -xdf 2>&1 | tee -a $log_file
git checkout . 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Step 1c: git clean kernels vvas repo.... " 2>&1 | tee -a $log_file
cd overlays/xvdpu/kernels/vitis_prj/vvas/ 2>&1 | tee -a $log_file
pwd 2>&1 | tee -a $log_file
git status 2>&1 | tee -a $log_file
git clean -xdf 2>&1 | tee -a $log_file
git checkout . 2>&1 | tee -a $log_file
git status 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Step 1d: return to dir: $working_dir.... " 2>&1 | tee -a $log_file
cd $working_dir 2>&1 | tee -a $log_file
pwd 2>&1 | tee -a $log_file
git status 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Step 1e: git pull repo.... " 2>&1 | tee -a $log_file
# can "git pull" fix "git clone" problem
git pull | tee -a $log_file
git fetch --recurse-submodules | tee -a $log_file
git fetch --recurse-submodules | tee -a $log_file
git status | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Step 2: build platform.... " 2>&1 | tee -a $log_file
make platform PFM=$platform 2>&1 | tee -a $log_file
ls -l 2>&1 | tee -a $log_file
echo "Step 2b: check platform.... " 2>&1 | tee -a $log_file
ls -l platforms/xilinx_$platform_202210_1/ 2>&1 | tee -a $log_file
echo "Step 2c: check platform IP files.... " 2>&1 | tee -a $log_file
ls -l platforms/vivado/ip 2>&1 | tee -a $log_file
echo "Step 2d: check platform Vivado project.... " 2>&1 | tee -a $log_file
ls -l platforms/vivado/$platform/project/ 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Step 3: build overlay xvdpu.... " 2>&1 | tee -a $log_file
make overlay PFM=$platform OVERLAY=xvdpu 2>&1 | tee -a $log_file
ls -l 2>&1 | tee -a $log_file
echo "Step 3b: check Kernel.... " 2>&1 | tee -a $log_file
ls -l $kernel_dir/ 2>&1 | tee -a $log_file
ls -l $kernel_dir/*.xsa 2>&1 | tee -a $log_file
echo "Step 3c: check Kernel Vivado project.... " 2>&1 | tee -a $log_file
ls -l $kernel_vivado_prj_dir/ 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "Step 4: build sdcard xvdpu.... " 2>&1 | tee -a $log_file
make sdcard PFM=$platform OVERLAY=xvdpu 2>&1 | tee -a $log_file
ls -l 2>&1 | tee -a $log_file
echo "Step 4b: Check sdcard image.... " 2>&1 | tee -a $log_file
ls -l petalinux/xilinx-vck190-base-trd/images/linux/ 2>&1 | tee -a $log_file
date && date -u && date %s 2>&1 | tee -a $log_file
echo "End of script $0... " 2>&1 | tee -a $log_file
GCC版本
如果使用Centos 7,自带的GCC版本太低,需要在“petalinux-config”中使能选项"Enable buildtools-extended"。 Ubuntu 18.04带的是GCC 7.5.0。 更改GCC后,最好清除整个工程,然后从头编译。如果不清除整个工程,可能遇到错误,比如“ uns_test.c:118:5: error: ‘for’ loop initial declarations are only allowed in C99 mode”。
Csh shell
使用Tcsh作为Csh shell。否则会遇到错误"compile_ip.csh Word too long"。命令如下:
代码语言:javascript复制sudo apt-get install tcsh
sudo update-alternatives --config csh
记录如下:
代码语言:javascript复制hankf@XSZGS4:sxvdpu$ sudo apt-get install tcsh
[sudo] password for hankf:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
tcsh
0 upgraded, 1 newly installed, 0 to remove and 213 not upgraded.
Need to get 428 kB of archives.
After this operation, 1,357 kB of additional disk space will be used.
Get:1 http://mirrors.aliyun.com/ubuntu bionic/universe amd64 tcsh amd64 6.20.00-7 [428 kB]
Fetched 428 kB in 8s (53.0 kB/s)
Selecting previously unselected package tcsh.
(Reading database ... 658787 files and directories currently installed.)
Preparing to unpack .../tcsh_6.20.00-7_amd64.deb ...
Unpacking tcsh (6.20.00-7) ...
Setting up tcsh (6.20.00-7) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
hankf@XSZGS4:sxvdpu$ sudo update-alternatives --config csh
There are 2 choices for the alternative csh (providing /bin/csh).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/bsd-csh 30 auto mode
1 /bin/bsd-csh 30 manual mode
2 /bin/tcsh 20 manual mode
Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /bin/tcsh to provide /bin/csh (csh) in manual mode
hankf@XSZGS4:sxvdpu$ ls -l /bin/*csh
-rwxr-xr-x 1 root root 170456 Sep 21 2019 /bin/bsd-csh
lrwxrwxrwx 1 root root 21 May 24 17:51 /bin/csh -> /etc/alternatives/csh
-rwxr-xr-x 1 root root 439544 Feb 9 2017 /bin/tcsh
hankf@XSZGS4:sxvdpu$ ls -l /etc/alternatives/csh
lrwxrwxrwx 1 root root 9 Sep 6 15:32 /etc/alternatives/csh -> /bin/tcsh
NFS目录
有些服务器的存储使用NFS实现,导致PetaLinux报告错误“tmp can't be located on nfs.”。一般来说,服务器的目录“/tmp/”还是本地硬盘。使用命令“petalinux-config”, 在“Yocto Setting”中,更改TMPDIR为目录“/tmp/”的一个子目录。
生成wic映像
PetaLinux生成wic映像的命令是“petalinux-package --wic”。但是它不会包含额外文件,比如VCKTRD中的kernel文件“binary_container_1.xclbin”。 如果缺少文件“binary_container_1.xclbin”,运行时会遇到错误“ Check failed: fd_ > 0 (-1 vs. 0) , open(/boot/binary_container_1.xclbin) failed”。
使用下列命令,能在wic映像文件中包含kernel文件“binary_container_1.xclbin”。
代码语言:javascript复制petalinux-package --wic --bootfiles "BOOT.BIN boot.scr Image ramdisk.cpio.gz.u-boot binary_container_1.xclbin"
运行
System Contoller 和BoardUI版本
建议使用最新版本。这次运行使用的是2021.2, 对应的文件是xtp613-vck190-bit-c-2021-2.pdf, rdf0574-vck190-bit-c-2021-2.zip, sc2.2_01.img.zip。
单板设置
按 https://xilinx.github.io/vck190-base-trd/2022.1/html/run/run-setup.html, 完成下列设置
- 去掉J326 (7-8) 的跳线帽.
- 在BoardUI GUI的“System Contoller”的“Set VADJ”的“Boot Up”里,设置FMC电压是1.2V,而且读回来也要是1.2V。VCK190掉电重启后,读回来也要是1.2V。在使用2020.2的BoardUI版本时,没有读回来电压,应该是没有设置成功,导致后续i2c操作失败,Linux报告错误“imx274_read_mbreg : i2c bulk read failed, 300e (2 bytes)”。
电脑区域设置
建议Regional Format使用"Recommended [English (United States)]"。 电脑是Windows 10 英文版。当Regional Format使用"Chinese [Simplified, Singapore]"时,BoardUI报告执行脚本错误。在目录vck190_bitBoardUItestsVCK190logs下的log文件中,能找到详细错误“'ascii' codec can't decode byte 0xd6 in position 10”。更改Regional Format设置后,错误消失。
System Contoller的start_boardframework
2020.2的start_boardframework的脚本如下
代码语言:javascript复制root@xilinx-vck190-SC-2020_2:~# cat /etc/init.d/start_boardframework.sh
echo "******************************************************"
echo "* Enter these key-sequence to exit Board Framework *"
echo "* *"
echo "* EXT<Enter key><Tab key> *"
echo "******************************************************"
nohup /usr/bin/boardframework.sh > /usr/share/BoardFramework/logs/BoardFramework.log
root@xilinx-vck190-SC-2020_2:~# sed -i -e 's/^#//' /etc/init.d/start_boardframework.sh
root@xilinx-vck190-SC-2020_2:~# cat /etc/init.d/start_boardframework.sh
echo "******************************************************"
echo "* Enter these key-sequence to exit Board Framework *"
echo "* *"
echo "* EXT<Enter key><Tab key> *"
echo "******************************************************"
nohup /usr/bin/boardframework.sh > /usr/share/BoardFramework/logs/BoardFramework.log
root@xilinx-vck190-SC-2020_2:~# /etc/init.d/start_boardframework.sh
******************************************************
* Enter these key-sequence to exit Board Framework *
* *
* EXT<Enter key><Tab key> *
***************************************************[ 85.14 ] DONE
测试V4L2设备
测试V4L2设备的命令如下:
代码语言:javascript复制dmesg | grep -i imx
ls /dev/med*
media-ctl -p -d /dev/media0
media-ctl -p -d /dev/media1
media-ctl -d /dev/media1 -V '"IMX274 2-001a":0 [fmt:SRGGB10_1X10/3840x2160@1/60 field:none colorspace:srgb]'
media-ctl -d /dev/media1 -V ""IMX274 2-001a":0 [fmt:SRGGB10_1X10/3840x2160 field:none]"
media-ctl -d /dev/media1 -V ""IMX274 2-001a":0 [fmt:SRGGB10_1X10/3840x2160 field:none]"
media-ctl -d /dev/media1 -V ""a4060000.csiss":0 [fmt:SRGGB10_1X10/3840x2160 field:none]"
media-ctl -d /dev/media1 -V ""a40c0000.isp":0 [fmt:SRGGB10_1X10/3840x2160 field:none]"
media-ctl -d /dev/media1 -V ""a40c0000.isp":1 [fmt:RBG888_1X24/3840x2160 field:none]"
media-ctl -d /dev/media1 -V ""a4080000.scaler":0 [fmt:RBG888_1X24/3840x2160 field:none]"
media-ctl -d /dev/media1 -V ""a4080000.scaler":1 [fmt:UYVY/1920x1080 field:none]"
media-ctl -p -d /dev/media1
ls /dev/v4l*
yavta -l /dev/v4l-subdev1
yavta --enum-formats /dev/video4
yavta -n 3 -c10 -f YUYV -s 1920x1080 --skip 9 -F /dev/video4
测试V4L2设备的记录如下:
代码语言:javascript复制xilinx-vck190-20221:/home/petalinux# media-ctl -d /dev/media1 -V ""a40c0000.isp":0 [fmt:SRGGB10_1X10/3840x2160 field:none]"
xilinx-vck190-20221:/home/petalinux# media-ctl -d /dev/media1 -V ""a40c0000.isp":1 [fmt:RBG888_1X24/3840x2160 field:none]"
xilinx-vck190-20221:/home/petalinux# media-ctl -d /dev/media1 -V ""a4080000.scaler":0 [fmt:RBG888_1X24/3840x2160 field:none]"
xilinx-vck190-20221:/home/petalinux# media-ctl -d /dev/media1 -V ""a4080000.scaler":1 [fmt:UYVY/1920x1080 field:none]"
xilinx-vck190-20221:/home/petalinux# media-ctl -p -d /dev/media1
Media controller API version 5.15.19
Media device information
------------------------
driver xilinx-video
model Xilinx Video Composite Device
serial
bus info
hw revision 0x0
driver version 5.15.19
Device topology
- entity 1: vcap_csi output 0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video4
pad0: Sink
<- "a4080000.scaler":1 [ENABLED]
- entity 5: IMX274 2-001a (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev0
pad0: Source
[fmt:SRGGB10_1X10/3840x2160@1/60 field:none
crop.bounds:(0,0)/3840x2160
crop:(0,0)/3840x2160
compose.bounds:(0,0)/3840x2160
compose:(0,0)/3840x2160]
-> "a4060000.csiss":0 [ENABLED]
- entity 7: a4060000.csiss (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: Sink
[fmt:SRGGB10_1X10/3840x2160 field:none]
<- "IMX274 2-001a":0 [ENABLED]
pad1: Source
[fmt:SRGGB10_1X10/3840x2160 field:none]
-> "a40c0000.isp":0 [ENABLED]
- entity 10: a40c0000.isp (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev2
pad0: Sink
[fmt:SRGGB10_1X10/3840x2160 field:none]
<- "a4060000.csiss":1 [ENABLED]
pad1: Source
[fmt:RBG888_1X24/3840x2160 field:none]
-> "a4080000.scaler":0 [ENABLED]
- entity 13: a4080000.scaler (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev3
pad0: Sink
[fmt:RBG888_1X24/3840x2160 field:none]
<- "a40c0000.isp":1 [ENABLED]
pad1: Source
[fmt:UYVY8_1X16/1920x1080 field:none]
-> "vcap_csi output 0":0 [ENABLED]
xilinx-vck190-20221:/home/petalinux# yavta --enum-formats /dev/video4
Device /dev/video4 opened.
Device `vcap_csi output 0' on `platform:vcap_csi:0' is a video output (without mplanes) device.
- Available formats:
Format 0: YUYV (56595559)
Type: Video capture mplanes (9)
Name: YUYV 4:2:2
Video format: BGR24 (33524742) 3840x2160 field none, 1 planes:
* Stride 11520, buffer size 24883200
xilinx-vck190-20221:/home/petalinux# yavta -n 3 -c10 -f YUYV -s 1920x1080 --skip 9 -F /dev/video4
Device /dev/video4 opened.
Device `vcap_csi output 0' on `platform:vcap_csi:0' is a video output (without mplanes) device.
Video format set: YUYV (56595559) 1920x1080 field none, 1 planes:
* Stride 3840, buffer size 4147200
Video format: YUYV (56595559) 1920x1080 field none, 1 planes:
* Stride 3840, buffer size 4147200
3 buffers requested.
length: 1 offset: 3918719344 timestamp type/source: mono/EoF
Buffer 0/0 mapped at address 0xffff997ae000.
length: 1 offset: 3918719344 timestamp type/source: mono/EoF
Buffer 1/0 mapped at address 0xffff993b9000.
length: 1 offset: 3918719344 timestamp type/source: mono/EoF
Buffer 2/0 mapped at address 0xffff98fc4000.
0 (0) [-] none 0 0 B 1707.959100 1707.959110 25.017 fps ts mono/EoF
1 (1) [-] none 1 0 B 1707.975763 1707.975772 60.013 fps ts mono/EoF
2 (2) [-] none 2 0 B 1707.992427 1707.992435 60.010 fps ts mono/EoF
3 (0) [-] none 3 0 B 1708.009091 1708.009099 60.010 fps ts mono/EoF
4 (1) [-] none 4 0 B 1708.025755 1708.025763 60.010 fps ts mono/EoF
5 (2) [-] none 5 0 B 1708.042419 1708.042427 60.010 fps ts mono/EoF
6 (0) [-] none 6 0 B 1708.059083 1708.059091 60.010 fps ts mono/EoF
7 (1) [-] none 7 0 B 1708.075747 1708.075755 60.010 fps ts mono/EoF
8 (2) [-] none 8 0 B 1708.092408 1708.092416 60.020 fps ts mono/EoF
9 (0) [-] none 9 0 B 1708.109072 1708.109080 60.010 fps ts mono/EoF
Captured 10 frames in 0.189952 seconds (52.644662 fps, 0.000000 B/s).
3 buffers released.
xilinx-vck190-20221:/home/petalinux# ls -l
total 52656
-rw-r--r-- 1 root root 24883200 Sep 5 23:33 frame-000007.bin
-rw-r--r-- 1 root root 24883200 Sep 5 23:33 frame-000008.bin
-rw-r--r-- 1 root root 4147200 Sep 5 23:58 frame-000009.bin
drwxr-xr-x 2 root root 4096 Sep 5 23:34 gstshark_2022-09-05_23:34:08
xilinx-vck190-20221:/home/petalinux# mv frame-000009.bin mipi-video4-1920x1080-yuyv.bin.img
xilinx-vck190-20221:/home/petalinux# rm *.bin
如果使用4K RBG888格式,记录如下:
代码语言:javascript复制xilinx-vck190-20221:/home/petalinux# media-ctl -d /dev/media1 -V ""a4080000.scaler":1 [fmt:RBG888_1X24/3840x2160 field:none]"
xilinx-vck190-20221:/home/petalinux# media-ctl -p -d /dev/media1
Media controller API version 5.15.19
Media device information
------------------------
driver xilinx-video
model Xilinx Video Composite Device
serial
bus info
hw revision 0x0
driver version 5.15.19
Device topology
- entity 1: vcap_csi output 0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video4
pad0: Sink
<- "a4080000.scaler":1 [ENABLED]
- entity 5: IMX274 2-001a (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev0
pad0: Source
[fmt:SRGGB10_1X10/3840x2160@1/60 field:none
crop.bounds:(0,0)/3840x2160
crop:(0,0)/3840x2160
compose.bounds:(0,0)/3840x2160
compose:(0,0)/3840x2160]
-> "a4060000.csiss":0 [ENABLED]
- entity 7: a4060000.csiss (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: Sink
[fmt:SRGGB10_1X10/3840x2160 field:none]
<- "IMX274 2-001a":0 [ENABLED]
pad1: Source
[fmt:SRGGB10_1X10/3840x2160 field:none]
-> "a40c0000.isp":0 [ENABLED]
- entity 10: a40c0000.isp (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev2
pad0: Sink
[fmt:SRGGB10_1X10/3840x2160 field:none]
<- "a4060000.csiss":1 [ENABLED]
pad1: Source
[fmt:RBG888_1X24/3840x2160 field:none]
-> "a4080000.scaler":0 [ENABLED]
- entity 13: a4080000.scaler (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev3
pad0: Sink
[fmt:RBG888_1X24/3840x2160 field:none]
<- "a40c0000.isp":1 [ENABLED]
pad1: Source
[fmt:RBG888_1X24/3840x2160 field:none]
-> "vcap_csi output 0":0 [ENABLED]
xilinx-vck190-20221:/home/petalinux# yavta --enum-formats /dev/video4
Device /dev/video4 opened.
Device `vcap_csi output 0' on `platform:vcap_csi:0' is a video output (without mplanes) device.
- Available formats:
Format 0: BGR24 (33524742)
Type: Video capture mplanes (9)
Name: 24-bit BGR 8-8-8
Video format: YUYV (56595559) 3840x2160 field none, 1 planes:
* Stride 7680, buffer size 16588800
xilinx-vck190-20221:/home/petalinux# yavta -n 3 -c10 -f BGR24 -s 3840x2160 --skip 9 -F /dev/video4
Device /dev/video4 opened.
Device `vcap_csi output 0' on `platform:vcap_csi:0' is a video output (without mplanes) device.
Video format set: BGR24 (33524742) 3840x2160 field none, 1 planes:
* Stride 11520, buffer size 24883200
Video format: BGR24 (33524742) 3840x2160 field none, 1 planes:
* Stride 11520, buffer size 24883200
3 buffers requested.
length: 1 offset: 3632309920 timestamp type/source: mono/EoF
Buffer 0/0 mapped at address 0xffff9d5b7000.
length: 1 offset: 3632309920 timestamp type/source: mono/EoF
Buffer 1/0 mapped at address 0xffff9bdfc000.
length: 1 offset: 3632309920 timestamp type/source: mono/EoF
Buffer 2/0 mapped at address 0xffff9a641000.
0 (0) [-] none 0 0 B 2113.613175 2113.613185 25.015 fps ts mono/EoF
1 (1) [-] none 1 0 B 2113.629839 2113.629849 60.010 fps ts mono/EoF
2 (2) [-] none 2 0 B 2113.646503 2113.646512 60.010 fps ts mono/EoF
3 (0) [-] none 3 0 B 2113.663167 2113.663175 60.010 fps ts mono/EoF
4 (1) [-] none 4 0 B 2113.679831 2113.679839 60.010 fps ts mono/EoF
5 (2) [-] none 5 0 B 2113.696495 2113.696503 60.010 fps ts mono/EoF
6 (0) [-] none 6 0 B 2113.713159 2113.713167 60.010 fps ts mono/EoF
7 (1) [-] none 7 0 B 2113.729822 2113.729831 60.013 fps ts mono/EoF
8 (2) [-] none 8 0 B 2113.746484 2113.746492 60.017 fps ts mono/EoF
9 (0) [-] none 9 0 B 2113.763147 2113.763155 60.013 fps ts mono/EoF
Captured 10 frames in 0.189956 seconds (52.643625 fps, 0.000000 B/s).
3 buffers released.
xilinx-vck190-20221:/home/petalinux# mv frame-000009.bin mipi-video4-3840x2160-bgr24.bin.img
上述抓取的图片,可以使用yuvplayer.exe查看。yuvplayer.exe的图标,是地球带手指。
运行XVDPU
使用vck190_base_trd_single_xvdpu_2022_1_prebuilt,运行四路XVDPU的记录如下:
代码语言:javascript复制xilinx-vck190-20221:/home/petalinux# smart-mipi-app -s -v -n 4
gst-launch-1.0 mediasrcbin media-device=/dev/media1 name=channel channel. ! video/x-raw, width=3840, height=2160, format=BGR, framerate=60/1 ! tee name=t4 ! vvas_xabrscaler xclbin-location=/boot/binary_container_1.xclbin kernel-name="v_multi_scaler:{v_multi_scaler_1}" alpha-r="0" alpha-g="0" alpha-b="0" beta-r="0.25" beta-g="0.25" beta-b="0.25" ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/aiinference.json ! ima4.sink_master vvas_xmetaaffixer name=ima4 ima4.src_master ! fakesink t4. ! queue ! ima4.sink_slave_0 ima4.src_slave_0 ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/drawresult.json ! perf ! kmssink driver-name=xlnx plane-id=34 render-rectangle="<0,0,3840,2160>" sync=false
XAIEFAL: INFO: Resource group Avail is created.
XAIEFAL: INFO: Resource group Static is created.
XAIEFAL: INFO: Resource group Generic is created.
XAIEFAL: INFO: Resource group Avail is created.
XAIEFAL: INFO: Resource group Static is created.
XAIEFAL: INFO: Resource group Generic is created.
^C
xilinx-vck190-20221:/home/petalinux# smart-mipi-app -s -v -n 4 -p
gst-launch-1.0 mediasrcbin media-device=/dev/media1 name=channel channel. ! video/x-raw, width=3840, height=2160, format=BGR, framerate=60/1 ! tee name=t4 ! vvas_xabrscaler xclbin-location=/boot/binary_container_1.xclbin kernel-name="v_multi_scaler:{v_multi_scaler_1}" alpha-r="0" alpha-g="0" alpha-b="0" beta-r="0.25" beta-g="0.25" beta-b="0.25" ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/aiinference.json ! ima4.sink_master vvas_xmetaaffixer name=ima4 ima4.src_master ! fakesink t4. ! queue ! ima4.sink_slave_0 ima4.src_slave_0 ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/drawresult.json ! perf ! kmssink driver-name=xlnx plane-id=34 render-rectangle="<0,0,3840,2160>" sync=false
gst-launch-1.0 mediasrcbin media-device=/dev/media1 name=channel channel. ! video/x-raw, width=3840, height=2160, format=BGR, framerate=60/1 ! tee name=t4 ! vvas_xabrscaler xclbin-location=/boot/binary_container_1.xclbin kernel-name="v_multi_scaler:{v_multi_scaler_1}" alpha-r="0" alpha-g="0" alpha-b="0" beta-r="0.25" beta-g="0.25" beta-b="0.25" ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/aiinference.json ! ima4.sink_master vvas_xmetaaffixer name=ima4 ima4.src_master ! fakesink t4. ! queue ! ima4.sink_slave_0 ima4.src_slave_0 ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/drawresult.json ! perf ! kmssink driver-name=xlnx plane-id=34 render-rectangle="<0,0,3840,2160>" sync=false
gst-launch-1.0 mediasrcbin media-device=/dev/media1 name=channel channel. ! video/x-raw, width=3840, height=2160, format=BGR, framerate=60/1 ! tee name=t4 ! vvas_xabrscaler xclbin-location=/boot/binary_container_1.xclbin kernel-name="v_multi_scaler:{v_multi_scaler_1}" alpha-r="0" alpha-g="0" alpha-b="0" beta-r="0.25" beta-g="0.25" beta-b="0.25" ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/aiinference.json ! ima4.sink_master vvas_xmetaaffixer name=ima4 ima4.src_master ! fakesink t4. ! queue ! ima4.sink_slave_0 ima4.src_slave_0 ! queue ! vvas_xfilter kernels-config=/usr/share/vvas/smart-mipi-app/yolov3/drawresult.json ! perf ! kmssink driver-name=xlnx plane-id=34 render-rectangle="<0,0,3840,2160>" sync=false
Setting pipeline to PAUSED ...
XAIEFAL: INFO: Resource group Avail is created.
XAIEFAL: INFO: Resource group Static is created.
XAIEFAL: INFO: Resource group Generic is created.
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
XAIEFAL: INFO: Resource group Avail is created.
XAIEFAL: INFO: Resource group Static is created.
XAIEFAL: INFO: Resource group Generic is created.
INFO:00.0 / 99:99:99.
perf: perf0; timestamp: 0:58:17.232986432; bps: 0.000; mean_bps: 0.000; fps: 0.000; mean_fps: 0.000
INFO:01.4 / 99:99:99.
perf: perf0; timestamp: 0:58:18.252793937; bps: 8979162788.177; mean_bps: 8979162788.177; fps: 45.107; mean_fps: 45.107
INFO:02.4 / 99:99:99.
perf: perf0; timestamp: 0:58:19.255023238; bps: 10924254548.411; mean_bps: 9951708668.294; fps: 54.878; mean_fps: 49.992
INFO:03.5 / 99:99:99.
perf: perf0; timestamp: 0:58:20.269647703; bps: 11771780015.180; mean_bps: 10558399117.256; fps: 59.135; mean_fps: 53.040
INFO:04.5 / 99:99:99.
perf: perf0; timestamp: 0:58:21.269771760; bps: 11942454454.928; mean_bps: 10904412951.674; fps: 59.993; mean_fps: 54.778
INFO:05.5 / 99:99:99.
perf: perf0; timestamp: 0:58:22.283548184; bps: 11977987761.925; mean_bps: 11119127913.724; fps: 60.171; mean_fps: 55.857
0:00:06.2 / 99:99:99.
运行2D Filter
2D Filter的demo使用了Jupyter Notebooks。打开Jupyter Notebooks后,每个cell前面有“[]”,标识cell还没有运行。每个cell前面有“[]”,标识cell还没有运行。点击 ‘Kernel’ → ‘Restart Kernel and Run All Cells’ 后,cell前面变成“[*]”,表示正在运行。运行完成后,“[]”会多一个数字,如“[1]”、“[2]”,其中的数字表示运行顺序。cell下也可能有运行时的输出信息。
其它
如果运行异常,建议检查dmesg,看其中是否有错误。也建议先验证V4L2设备,看其能否采集视频。