全志V3S嵌入式驱动开发(USB camera驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        soc和mcu的一个重要区别,就是soc会涉及到大量的音视频操作,当然音视频也就包括了camera摄像头这部分。v3s本身支持csi接口和mipi csi2接口。但是两者不能同时使用,一份电路图,只能使用一种接口。另外,厂家对于两份接口的支持也是不同的,对于csi,官方soc文档中给出了主要的寄存器配置信息;而对mipi cs2则支持有限,只是一份介绍性的文档。

1、mipi csi2电路图(对应的摄像头是AR0330

         这是mipi csi2的驱动电路,整个结构还是很清楚的。CK_P & CK_N是时钟差分,D0_P & D0_N、D1_P & D1_N是数据差分。另外三个信号是MCLK、PWDN和RST。AVDD是电压信号,2.8V。上面这些都是数据通讯的信号线。控制信号线则比较简单,主要就是IIC接口,即SCK和SDA。

        电路上看camera接口还是比较简单的,几乎没有什么难度。而难点正是在于软件驱动的编写,而使用频率比较高的mipi csi2又没有相关的驱动支持,这就有点尴尬。除此之外,对于h264这样的编解码支持,目前文档上面体现的也不多,这也有点遗憾。

2、usb camera

        为了弥补camera的遗憾,同时可以让大家继续学习和了解camera,另外一个方向,大家可以试试usb camera。使用usb camera有几个好处,第一,本身linux kernel就对usb camera uvc支持,不需要做额外的工作,就可以适配很多的第三方摄像头;第二;相关的摄像头也比较容易采购,选择余地较多;第三,有了驱动之后,大家也方便对/dev/video0进行操作,进行图片的后续处理,或者相关视频的开发工作。

3、设备树配置

        设备树的配置没有特别需要注意的。和usb host一样,它所要做的就是就是把usb_otg中的dr_mode修改为host,其他部分不需要则不做修改。

&usb_otg {dr_mode = "host";status = "okay";
};

        后续其他所有的usb设备,只要v3s是作为host访问,基本设备树这边的修改都是这样的。

4、uvc驱动的修改

        目前关于usb camera这部分的配置,主要位于drivers->Multimedia support这个部分,

         自从内核从4.14.y升级到5.2.y之后,关于usb camera这部分驱动,默认已经配置好。因此对于我们来说,唯一需要修改的,就是把Multimedia support下面所有的M选项,修改成y选项。这也就是说明,相关的驱动代码没有被编译成单独的ko文件,而是集成在zImage里面。这主要是对于我们测试来说比较方便。修改之后,可以通过diff查看下,相关的内容是如何修改的,

2097,2098c2096,2097
< CONFIG_VIDEO_TUNER=y
< CONFIG_V4L2_FWNODE=y
---
> CONFIG_VIDEO_TUNER=m
> CONFIG_V4L2_FWNODE=m
2115c2114
< CONFIG_USB_VIDEO_CLASS=y
---
> CONFIG_USB_VIDEO_CLASS=m
2117c2116
< CONFIG_USB_GSPCA=y
---
> CONFIG_USB_GSPCA=m
2191,2192c2190,2191
< CONFIG_VIDEO_EM28XX=y
< CONFIG_VIDEO_EM28XX_V4L2=y
---
> CONFIG_VIDEO_EM28XX=m
> CONFIG_VIDEO_EM28XX_V4L2=m
2198c2197
< CONFIG_VIDEO_MUX=y
---
> CONFIG_VIDEO_MUX=m
2200c2199
< CONFIG_VIDEO_SUN6I_CSI=y
---
> CONFIG_VIDEO_SUN6I_CSI=m
2215c2214
< CONFIG_VIDEO_TVEEPROM=y
---
> CONFIG_VIDEO_TVEEPROM=m
2217,2221c2216,2220
< CONFIG_VIDEOBUF2_CORE=y
< CONFIG_VIDEOBUF2_V4L2=y
< CONFIG_VIDEOBUF2_MEMOPS=y
< CONFIG_VIDEOBUF2_DMA_CONTIG=y
< CONFIG_VIDEOBUF2_VMALLOC=y
---
> CONFIG_VIDEOBUF2_CORE=m
> CONFIG_VIDEOBUF2_V4L2=m
> CONFIG_VIDEOBUF2_MEMOPS=m
> CONFIG_VIDEOBUF2_DMA_CONTIG=m
> CONFIG_VIDEOBUF2_VMALLOC=m
2232c2231
< CONFIG_VIDEO_MSP3400=y
---
> CONFIG_VIDEO_MSP3400=m
2241,2242c2240,2241
< CONFIG_VIDEO_SAA711X=y
< CONFIG_VIDEO_TVP5150=y
---
> CONFIG_VIDEO_SAA711X=m
> CONFIG_VIDEO_TVP5150=m
2255,2256c2254,2255
< CONFIG_VIDEO_OV2640=y
< CONFIG_VIDEO_MT9V011=y
---
> CONFIG_VIDEO_OV2640=m
> CONFIG_VIDEO_MT9V011=m
3636c3635
< CONFIG_MULTIPLEXER=y
---
> CONFIG_MULTIPLEXER=m

        箭头<表示新添加的内容,箭头>表示删除的内容,大家灵活比较一下即可。

5、编译烧入文件

        因为dts和内核代码都发生了改变,所以我们需要分别生成dtb文件、zImage文件。等到编译完成之后,烧入即可。

6、开始测试

        所有的文件都准备之后,就可以开始准备测试了。测试可以分成三个部分,第一,当usb camera插入的时候,看看有没有具体的打印信息,

# [  101.038523] usb 1-1: new high-speed USB device number 2 using ehci-platform
[  101.283232] usb 1-1: New USB device found, idVendor=0bda, idProduct=9143, bcdDevice=20.22
[  101.291460] usb 1-1: New USB device strings: Mfr=3, Product=1, SerialNumber=2
[  101.298638] usb 1-1: Product: USB Camera
[  101.302573] usb 1-1: Manufacturer: RYS
[  101.306326] usb 1-1: SerialNumber: 200901010001
[  101.320010] uvcvideo: Found UVC 1.00 device USB Camera (0bda:9143)
[  101.347812] uvcvideo 1-1:1.0: Entity type for entity Realtek Extended Controls Unit was not initialized!
[  101.357392] uvcvideo 1-1:1.0: Entity type for entity Extension 4 was not initialized!
[  101.365273] uvcvideo 1-1:1.0: Entity type for entity Processing 2 was not initialized!
[  101.373224] uvcvideo 1-1:1.0: Entity type for entity Camera 1 was not initialized!
[  101.381864] input: USB Camera: USB Camera as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1:1.0/input/input1

        第二,查看对应的video设备节点有没有生成,

# ls -l /dev/video*
crw-------    1 root     root       81,   0 Jan  1 00:01 /dev/video0
crw-------    1 root     root       81,   1 Jan  1 00:01 /dev/video1

        第三,编写程序,对/dev/video节点进行访问,查看是否可以进行截图操作。这里我们参考了网上的一份代码,地址在https://blog.csdn.net/zhangdaxia2/article/details/72763847。链接地址的最后直接给出了源代码,不妨命名为new_video.c,交叉编译之后copy到开发板,

arm-linux-gnueabihf-gcc new_video.c -g -o new_video

        等到文件准备好之后,就可以准备开始截图操作了。因为相关的摄像头是/dev/video0,所以只需要输入./new_video 0即可,

# ./new_video 0
use video 0
video 0--------------capability------------------
driver:uvcvideo    
card:USB Camera: USB Camera   
capabilities:84a00001
-------------VIDIOC_ENUM_FMT--------------
index:0   
pixelformat:MJPG  
description:Motion-JPEG
index:1   
pixelformat:YUYV  
description:YUYV 4:2:2
-----------------VIDIOC_G_FMT----------------------
width:640   
height:480   
type:1   pixelformat:YUYV
----------------mmap----------------
start:b6db2000  length:614400
start:b6d1c000  length:614400
start:b6c86000  length:614400
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------
-------------poll success---------------

        不出意外的话,你会看到上面这些打印,除此之外,ls一下,还可以看到生成的10张bmp图像,

# ls -l
total 10312
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb0.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb1.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb2.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb3.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb4.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb5.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb6.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb7.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb8.bmp
-rw-r--r--    1 root     root        921654 Jan  1 00:03 rgb9.bmp

        为了验证效果,此时可以拔掉usb摄像头,重新插入u盘,mount到/mnt目录之后,就可以把所有的bmp图像拷贝到U盘出上。重新u盘插上电脑,用一个看图软件看一下效果,就能判断出是不是camera真的是有效果。目前看下来,拍摄的前面几张图片比较暗淡,后面是正常的,这一点略微有点奇怪。

        至此,usb camera的部分算是讲完了,大家可以自己做做实验,加深一下印象和认知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2895.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python+MySQL所写的商城管理系统

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87971437?spm1001.2014.3001.5503 《51商城》程序使用说明 51商城项目分为网站前台和后台两个部分&#xff0c;下面将分别介绍这2个部分的使用。 1.网站前台 在虚拟环境中启动程序后&a…

【数据结构与算法】学校运动会管理系统(C/C++)

这是一个完整的项目&#xff0c;若有需要整个项目的压缩包&#xff08;源代码、文档、md文件等&#xff09;可私聊发送"学校运动会管理系统"。 问题描述 在“学校运动会管理系统”中&#xff0c;设有n个单位参加运动会&#xff08;单位可是学院、系、年级等&#xf…

尚硅谷Docker实战教程-笔记03【Docker常用命令】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

java版工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

轨道交通车体自动化检修测量大尺寸测量仪器-CASAIM激光三维扫描仪

现今我国轨道交通高速发展&#xff0c;重大装备技术的进步离不开先进的大尺寸测量手段支持&#xff0c;CASAIM大尺寸测量在测量环境、测量精度和测量效率上明显区别于常规尺寸测量&#xff0c;可以快速检测车体表面的尺寸变形等问题&#xff0c;实现高精度、高效率的自动化车体…

flutter mac环境配置

在 macOS 上安装和配置 Flutter 开发环境 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter一、配置flutter环境变量在 macOS 上安装和配置 Flutter 开发环境 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 解压文件放在我的文档里面 然后设置环境变量 1. 执…

Java的SPI

JavaSPI&#xff0c;全称是ServiceProviderInterface。 它是一种基于接口的动态扩展机制&#xff0c;相当于Java里面提供了一套接口。然后第三方可以实现这个接口来完成功能的扩展和实现。 举个简单的例子。 在Java的SDK里面&#xff0c;提供了一个数据库驱动的接口java.sql.Dr…

redismariadb + keepalived 高可用

目录 机器准备 安装后服务 redis 安装redis mariadb 安装mariadb 启动和配置 互为主从同步配置 keepalived keepalived安装 修改主从 keepalived的配置 主从配置-mariadb监控 主从配置-redis监控 查看和使用 Keepalived Mariadb redis 机器准备 两台机器&…

图解CNN中的卷积(卷积运算、池化、Padding、多通道的卷积)

文章目录 卷积操作池化Padding对多通道&#xff08;channels&#xff09;图片的卷积套上激活函数是什么样的参考&#xff1a; 卷积层是深度学习神经网络中经常使用的一种层。它通过卷积运算来提取输入的特征&#xff0c;常用于图像、语音等信号处理任务中。 卷积层有以下几个参…

阿里飞猪三面

&#xff08;有许多人是用青春的幸福作成功的代价的。——莫扎特&#xff09; 背景 该岗位是阿里飞猪的前端部门&#xff0c;岗位名称是node.js高级/专家开发工程师。主要负责用NodeJs作为后端技术&#xff0c;向上层Java&#xff0c;Node等业务服务&#xff0c;提供中间层基础…

idea连接MYSQL报错汇总

idea连接MYSQL报错汇总 【The last packet sent successfully to the server was 0 milliseconds ago.The driver has not received any packets from the server.】 原因&#xff1a;mysql57 运行在非默认端口号 解决&#xff1a; 1.测试本地连接mysqsl57 打开C:\ProgramDa…

Unity核心9——3D动画

一、3D 动画的使用 ​ 使用导入的 3D 动画&#xff1a; 将模型拖入场景中为模型对象添加 Animator 脚本为其创建 Animator Controller 动画控制器&#xff08;状态机&#xff09;将想要使用的相关动作&#xff0c;拖入 Animator Controller 动画控制器&#xff08;状态机&…