linux kernel 摄像头驱动

您所在的位置:网站首页 调试linux驱动 linux kernel 摄像头驱动

linux kernel 摄像头驱动

2024-06-04 13:08| 来源: 网络整理| 查看: 265

1综合篇点我2uboot移植点我3uboot lcd驱动点我4kernel移植点我5kernel lcd驱动点我6摄像头驱动点我7ubuntu base移植点我8挂载网络文件系统点我9qt移植点我10搭建qt交叉编译点我11wifi移植点我

笔者所使用的ov5640摄像头,和Linux通信使用的是CSI和I2C协议

在这里插入图片描述

1 修改设备树

开发板摄像头接口原理图:

在这里插入图片描述

打开前面的imx6ull-user-emmc.dts文件 在i2c节点中添加

#address-cells = ; #size-cells = ; ov5640: ov5640@3c { compatible = "ovti,ov5640"; reg = ; pinctrl-names = "default"; pinctrl-0 = ; clocks = ; clock-names = "csi_mclk"; pwn-gpios = ; rst-gpios = ; csi_id = ; mclk = ; mclk_source = ; status = "okay"; port { ov5640_ep: endpoint { remote-endpoint = ; }; }; };

![在这里插入图片描述](https://img-blog.csdnimg.cn/5416a23b0fdb45738996ae2e1148b33b.png

iomuxc的pinctrl_csi1子节点内容修改为:

pinctrl_csi1: csi1grp { fsl,pins = ; };

在这里插入图片描述

csi节点使用摄像头总线

&csi { status = "okay"; port { csi1_ep: endpoint { remote-endpoint = ; }; }; };

在这里插入图片描述

2 修改kernel配置

打开 v4l2-core文件下的Kconfig文件

gedit drivers/media/v4l2-core/Kconfig

找到 VIDEOBUF2_DMA_CONTIG 这个配置选项,可以看到这个选项虽然tristate类型,但是却没有说明语句,导致在menuconfig无法显示出来给我们配置,我们可以手动加入说明语句让它在menuconfig显示出来,也可以在下面添加"default y"默认编译进内核中

在这里插入图片描述

打开menuconfig配置选项

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

将V4L platform devices 的配置修改如下

-> Device Drivers -> Multimedia support ->[ * ] V4L platform devices ---> -> MXC Video For Linux Video Output -> MXC Video For Linux Video Capture amera/V4L2 PRP Features support ---> -> OmniVision ov5640 camera support -> OmniVision ov5642 camera support -> OmniVision ov5640 camera support using mipi -> Analog Device adv7180 TV Decoder Input support -> Select Overlay Rounting (Queue ipu device for overlay library) ---> -> Pre-processor Encoder library -> IPU CSI Encoder library -> IPU v4l2 output support -> MXC PxP V4L2 driver -> CSI camera support -> OmniVision ov5640 camera support

编译内核和设备树

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

在这里插入图片描述

编译成功 将zImage和imx6ull-user-emmc.dtb文件拷贝到挂载网络文件系统的文件夹下,设置网络文件系统可参考《挂载网络文件系统》这边文章

cp arch/arm/boot/zImage /home/work/imx6ull/rootfs/zImage/ cp arch/arm/boot/dts/imx6ull-user-emmc.dtb /home/work/imx6ull/rootfs/zImage/

给开发板重新上电进入系统

在这里插入图片描述

可以看到/dev/下连个两个video设备

3 v4l-utils工具安装 apt install v4l-utils

查看可用的视频设备,其中/dev/video0对应OV5640的物理设备

#执行命令 v4l2-ctl --list-devices

在这里插入图片描述

查看摄像头所有参数

#执行命令 sudo v4l2-ctl -d /dev/video0 --all

在这里插入图片描述

查看摄像头所支持的分辨率

#执行命令 v4l2-ctl --list-formats-ext -d /dev/video0

在这里插入图片描述

4 安装gstreamer

可以使用gstreamer对摄像头做个简单测试,安装命令如下

apt install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools

#在LCD屏幕上显示摄像头的内容

gst-launch-1.0 -v v4l2src device=/dev/video0 ! "video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, framerate=(fraction)15/1" ! videoconvert ! fbdevsink

显示结果:

在这里插入图片描述

5 搭建mjpeg-streamer流媒体服务器

下载源码:https://github.com/chen3135/mjpg-streamer 在主机中下载好之后将文件拷贝到主机创建给开发板的挂载板网络文件系统中的opt下解压

在这里插入图片描述

解压之后得到的文件

在这里插入图片描述

解压之后回到网络文件系统的根目录

在这里插入图片描述

这里有一个主机挂载ubuntu base的脚本和退出挂载的脚本 mount.sh的内容

#/bin/bash sudo mount -t proc /proc proc sudo mount -t sysfs /sys sys sudo mount -o bind /dev dev sudo mount -o bind /dev/pts dev/pts sudo chroot ./

unmount.sh的内容

#!/bin/bash echo "UNMOUNTING" sudo umount proc sudo umount sys sudo umount dev/pts sudo umount dev

在主机中执行执行mount.sh挂载ubuntu base

在这里插入图片描述

给ubuntu base安装依赖库

apt-get install cmake libjpeg8-dev

在这里插入图片描述

进入mjpg-streamer-master

在这里插入图片描述

执行make

在这里插入图片描述

现在主机退出挂载

在这里插入图片描述

现在启动开发板,在开发板中进入/opt/mjpg-streamer-master

在这里插入图片描述

查看 start.sh的内容

vi start.sh

查看发现里面只有这个语句是有用的

./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -u -f 50" -o "./output_hh ttp.so -w ./www"

因为我的摄像头的格式是YUYV的格式,所以在我这里需要加上-y 1指定格式,否则会报错

-y 1 表示使用 V4L2_PIX_FMT_YUYV -y 2 表示使用 V4L2_PIX_FMT_YVYU -y 3 表示使用 V4L2_PIX_FMT_UYVV -y 4 表示使用 V4L2_PIX_FMT_VYUY

在这里插入图片描述

执行start.sh脚本

在这里插入图片描述

我开发板的ip是192.168.4.108,在win11下用浏览器打开

http://192.168.4.108:8080/

就可以查看摄像头的内容了

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3