全志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的部分算是讲完了,大家可以自己做做实验,加深一下印象和认知。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT:开放AI平台的最新进展和功能

第一章&#xff1a;引言 在过去的几年中&#xff0c;人工智能技术取得了长足的发展&#xff0c;其在各个领域的应用也日益广泛。而在AI技术中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是备受关注的领域之一。ChatGPT作为OpenAI的开放AI平台上的一项重要技术&am…

慕课:笔记

课程链接&#xff1a;直面JavaScript中的30个疑难杂症_JavaScript面试题-慕课网 第二章&#xff1a;数据类型 数据类型是每门编程语言的必修之课&#xff0c;你是否对JavaScript的数据类型和检测存在困惑&#xff0c;本章节将为你揭晓其中的奥秘&#xff0c;让你对数据类型有…

【Tableau案例】神奇宝贝属性及实力强弱|数据可视化

提前声明&#xff1a;神奇宝贝的数据分析仅供参考&#xff0c;不涉及对于神奇宝贝的各种评价&#xff0c;另外我是初学tableau&#xff0c;涉及到使用的tableau操作可能很简单&#xff0c;复杂的还掌握不熟练&#xff0c;之后会拿时间系统学习tabelau。 数据预处理 该数据集有…

CODESYS模拟量超限报警功能块

博途PLC模拟量超限报警功能块详细介绍请参看下面文章链接: PLC模拟量超限报警功能块_RXXW_Dor的博客-CSDN博客模拟量偏差报警功能块请参看下面文章:模拟量偏差报警功能块(SCL代码)_RXXW_Dor的博客-CSDN博客工业模拟量采集的相关基础知识,可以查看专栏的系列文章,这里不再赘…

OSPF故障定位没思路?照这篇抄就行

我的网工朋友大家好。 好久没聊OSPF技术了&#xff0c;相关基础且经典的内容&#xff0c;公众号陆陆续续分享过一些&#xff0c;趣味科普&#xff0c;面试考题&#xff0c;实验操作&#xff0c;都有涉及。 按照惯例&#xff0c;先给你整一波优质的往期内容&#xff1a; 《 5个…

Spring Boot之静态资源映射 | 超级详细,建议收藏

写在前面&#x1f525; 上几期&#xff0c;我们重点讲解了Spring Boot集成Swagger-UI实现在线API文档及美化UI界面&#xff0c;而这期&#xff0c;在 Web 应用中会都会涉及到大量的静态资源&#xff0c;例如 图片、JS、CSS 和 HTML 等。我们知道&#xff0c;Spring MVC 导入静态…

WebGIS 信息系统-主界面基本模块功能设计

文章目录 系统文件夹结构主界面地图基本管理模块功能设计手机定位模块功能设计经纬度路径生成功能设计导航模块功能设计用户管理模块功能设计 系统文件夹结构 为了使项目容易管理和维护&#xff0c;在开发之前需要确定项目的系统文件夹结构&#xff0c;即系统文件夹结构设计。…

C++ / QT 旅游产品管理系统

一、项目介绍 旅游产品管理系统 你是一家旅行社的 IT 主管&#xff0c;现在需要你设计并实现一个旅游产品管理系统。 1 &#xff09; 基本功能要求 * 实现基础界面&#xff1a; 参照现有的旅游产品管理系统&#xff1a;查看产品、选择产品、使用说明等内容 * 支持旅游产品…

用Python搭建监控平台详解

概要 监控和运维&#xff0c;是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控&#xff0c;我们能够及时了解到企业网络的运行状态。一旦出现安全隐患&#xff0c;你就可以及时预警&#xff0c;或者是以其他方式通知运维人员&#xff0c;让运维监控人员有时…

Springboot 核心注解和基本配置解读

目录 1. Springboot 入门与原理 1.1 Springboot 简介 1.1.1 什么是Springboot 1.1.2 Springboot 主要优点 1.2 Springboot 相关注解 1.2.1 元注解 1.2.1.1 Target 1.2.1.2 Retention 1.2.2 Configuration 1.2.3 Import 1.2.3.1 直接注入 1.2.3.2 实现 ImportSelector…

Error: Cannot find module ‘webpack‘ 问题解决办法

这句话的意思是&#xff1a;没有找到webpack模块。 就算之前你装了webpack&#xff0c;那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决

4.蜂鸣器

1.了解蜂鸣器&#xff1a; 蜂鸣器在使用3.3V无法驱动&#xff0c;需要借助到三极管的放大特性(IcβIb)将蜂鸣器驱动&#xff1b;本次原理图中&#xff0c;接R33电阻是因为当STM32单片机复位时处于浮空状态&#xff0c;防止小电流让蜂鸣器响而添加的。 2.蜂鸣器原理图&#xf…

剖析Linux文件系统

Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数&#xff0c;Linux 可以在许多种存储设备上支持许多种文件系统。例如&#xff0c;read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型&#xff…

Java——《面试题——Redis篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

使用Nginx的反向代理来访问服务器例子——Nginx笔记

因为网站上的视频加载过慢&#xff0c;想使用nginx服务器实现HLS视频播放服务。顺便记录一下通过Nginx的方向代理来访问服务器。这里在原先的项目上进行改造。原先的项目已经部署在公网&#xff0c;使用tomcat服务器&#xff0c;可以直接用地址进行访问。 1.这里使用的8080端口…

阿里飞猪三面

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

ChatGPT对未来编程语言发展的影响与展望

目录 一、引言1.ChatGPT的介绍与背景介绍背景 2.编程语言发展的重要性和挑战重要性挑战 二、ChatGPT在编程领域的应用1.自然语言处理技术在编程中的应用现状2. ChatGPT作为编程辅助工具的潜力与优势 三、ChatGPT对编程语言发展的影响1. 创新编程模式的涌现2. 语言设计与交互方式…

【问题记录】如何使用 pip 在 linux 上安装 pytorch

一、进入 pytorch 官网 pytorch 官网&#xff1a;https://pytorch.org/ 二、在页面选择环境 三、复制官网弹出的命令并运行即可 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

Redis中的缓存雪崩、击穿、穿透的原因以及解决办法

缓存雪崩、击穿、穿透一旦发生&#xff0c;会导致大量的请求积压到数据库层。如果请求的并发量很大&#xff0c;就会导致数据库宕机或是故障&#xff0c;这就是很严重的生产事故了。 俗话说&#xff0c;知己知彼&#xff0c;百战不殆。了解了问题的成因&#xff0c;我们就能够…

微服务_Nacos

简介 Nacos&#xff08;全称为“动态服务发现、配置和服务管理平台”&#xff09;是阿里巴巴开源的一款云原生服务发现和配置管理平台&#xff0c;支持多种语言。它提供了服务发现、配置管理、服务治理和流量管理等功能&#xff0c;使得微服务系统的构建和管理更加便捷。Nacos…