这里主要介绍如何在linux系统下,添加AN5641模块及如何捕获该视频图像
一. vivado工程
系统的出厂程序里,已经集成了该模块,在板卡的资料中,该工程放在factory_file文件夹中。
二. petalinux工程
- 设备树修改
设备树内容,请参考factory_file文件中的“出厂bsp”文件。具体方法为:
- 解压出后缀为bsp的文件
- 使用如下命令,创建一个petalinux工程
petalinux-create -t project -s ./xxxx.bsp -n petalinux_read
- 将petalinux_read工程中的system-user.dts中的内容,拷贝到自己的petalinux工程中
- 内核驱动配置
进入内核配置菜单,勾选ov5640驱动
Symbol: VIDEO_OV5640 [=y] -> Device Drivers -> Multimedia support (MEDIA_SUPPORT [=y]) -> I2C Encoders, decoders, sensors and other helper chips
- ov5640驱动修改 下载这里的ov5640.c文件,覆盖petalinux工程文件./components/yocto/workspace/sources/linux-xlnx/drivers/media/i2c/ov5640.c
- 编译petalinux工程
三. 系统信息
-
检查设备节点创建 在设备树及vivado工程没有错误的情况下,系统下将会出现/dev/video0设备。
-
通过下面命令,若可以成功获取设备下各节点信息,则说明设备ov5640的i2c连接正常。
root@petalinux:~# media-ctl -p -d /dev/media0 Media controller API version 5.4.0 Media device information ------------------------ driver xilinx-video model Xilinx Video Composite Device serial bus info hw revision 0x0 driver version 5.4.0 Device topology - entity 1: vcap_mipi output 0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- "800f0000.v_proc_ss":1 [ENABLED] - entity 5: ov5640 1-003c (1 pad, 1 link) type V4L2 subdev subtype Sensor flags 0 device node name /dev/v4l-subdev0 pad0: Source [fmt:UYVY8_1X16/1920x1080@1/15 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] -> "80050000.mipi_csi2_rx_subsystem":1 [ENABLED] - entity 7: 80050000.mipi_csi2_rx_subsystem (2 pads, 2 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Source [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb] -> "800f0000.v_proc_ss":0 [ENABLED] pad1: Sink [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb] <- "ov5640 1-003c":0 [ENABLED] - entity 10: 800f0000.v_proc_ss (2 pads, 2 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Sink [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb] <- "80050000.mipi_csi2_rx_subsystem":0 [ENABLED] pad1: Source [fmt:RBG888_1X24/1920x1080 field:none colorspace:srgb] -> "vcap_mipi output 0":0 [ENABLED] root@petalinux:~#
-
节点名称 每块板卡,上述节点名称会因vivado工程不同而变化,根据上面的信息,我们可以获取到设备节点名如下:
ov5640 1-003c 80050000.mipi_csi2_rx_subsystem 800f0000.v_proc_ss
四. 图像捕获方法
-
gstreamer显示1920x1080图像
media-ctl -V '"ov5640 1-003c":0 [fmt:UYVY8_1X16/1920x1080@1/30 field:none]' media-ctl -V '"80050000.mipi_csi2_rx_subsystem":0 [fmt:UYVY8_1X16/1920x1080 field:none]' media-ctl -V '"80050000.mipi_csi2_rx_subsystem":1 [fmt:UYVY8_1X16/1920x1080 field:none]' media-ctl -V '"800f0000.v_proc_ss":0 [fmt:UYVY8_1X16/1920x1080 field:none]' media-ctl -V '"800f0000.v_proc_ss":1 [fmt:UYVY8_1X16/1920x1080 field:none]' gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=1920,height=1080 ! kmssink bus-id=fd4a0000.zynqmp-display fullscreen-overlay=1
-
gstreamer显示1280x720图像
media-ctl -V '"ov5640 1-003c":0 [fmt:UYVY8_1X16/1280x720@1/25 field:none]' media-ctl -V '"80050000.mipi_csi2_rx_subsystem":0 [fmt:UYVY8_1X16/1280x720 field:none]' media-ctl -V '"80050000.mipi_csi2_rx_subsystem":1 [fmt:UYVY8_1X16/1280x720 field:none]' media-ctl -V '"800f0000.v_proc_ss":0 [fmt:UYVY8_1X16/1280x720 field:none]' media-ctl -V '"800f0000.v_proc_ss":1 [fmt:UYVY8_1X16/1280x720 field:none]' gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=1280,height=720 ! kmssink bus-id=fd4a0000.zynqmp-display fullscreen-overlay=1
-
Qt显示1920x1080图像
media-ctl -V '"ov5640 1-003c":0 [fmt:UYVY8_1X16/1920x1080@1/30 field:none]' media-ctl -V '"80050000.mipi_csi2_rx_subsystem":0 [fmt:UYVY8_1X16/1920x1080 field:none]' media-ctl -V '"80050000.mipi_csi2_rx_subsystem":1 [fmt:UYVY8_1X16/1920x1080 field:none]' media-ctl -V '"800f0000.v_proc_ss":0 [fmt:UYVY8_1X16/1920x1080 field:none]' media-ctl -V '"800f0000.v_proc_ss":1 [fmt:RBG888_1X24/1920x1080 field:none colorspace:srgb]' ./qt_mipi