Linux USB摄像头驱动【转】

2023-10-30

本文转载自:http://www.itdadao.com/articles/c15a509940p0.html

 

 

在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 USB 接口的摄像头。这一章主要是介绍 USB 摄像头的设备驱动程序。在我们印象中,驱动程序都是一个萝卜一个坑,拿到一个硬件就需要去安装它相对应的驱动程序。有时候稍有不对还会导致电脑崩溃,是不是让人很郁闷?这一章我们讲 USB 摄像头设备驱动,那么是不是支持所有的 USB 摄像头驱动呢?带着这个疑问开始我们这一章的摄像头学习之旅吧。

14. 1 确定 USB 摄像头支持 UVC (在 PC 上) 

WEBEE 在某宝上搜索 USB 摄像头,发现了摄像头形状千奇百怪,那到底哪一种适合这一章我们学习呢?摄像头的市场并不仅仅只是针对我们这些程序猿,很多参数并不会在介绍页面上写出来,你去实体店上买,那些卖家很可能也不知道。所以在购买 USB 摄像头要认准这些参数哦,不然,按照这一章的教材,很可能答不到效果哦,那么可能就需要自己对我们的应用层的测试代码进行修改哦。

那什么 USB 摄像头适合我们这一章的教程呢,这里有几个关键字: 1.支持
UVC(免驱), 2.YUV 或者 MJPEG 格式输出。

在写这一章教程的时候, WEBEE 手头刚好有一个 USB 摄像头,想当年还是买电脑的时候送的,不知道现在能不能用上。那拿到摄像头,我们需要怎么做呢?

14.1.1 把摄像头插入 PC 机的 USB 接口,查看 ID


注:如果你是在 Ubuntu 等 linux操作系统下请看 1~2,在 windows 下请直接看看 3 。1. 在 linux 类操作系统下插入 USB 摄像头,用 dmesg 打印信息


#dmesg
[ 8705.813109] uvcvideo: Found UVC 1.00 device USB2.0 UVC PC
Camera (174f:5931)
[ 8705.867695] uvcvideo: UVC non compliance - GET_DEF(PROBE) not
supported. Enabling workaround.
[ 8705.886554] uvcvideo: Found UVC 1.00 device USB2.0 Camera
(1e4e:0102)
[ 8705.888801] uvcvideo: UVC non compliance - GET_DEF(PROBE) not
supported. Enabling workaround.
[8705.889829] input: USB2.0 Camera as
/devices/pci0000:00/0000:00:1a.7/usb1/1 -1/1 -1:1.0/input/input12
[ 8705.890440] usbcore: registered new interface driver uvcvideo
[ 8705.890446] USB Video Class driver (1.1.1)
[ 8827.856129] pool[5982]: segfault at 0 ip (null) sp afabc0ec error 14 in
gnome-screenshot[8048000+12000]

第一个 UVC 1.00 device USB2.0 UVC PC Camera 是笔记本自带的摄像头它的 VID:PID 是 174f:5931 ;第二个 UVC 1.00 device USB2.0 Camera 也就是我们插入的 USB 摄像头他的 VID:PID 是 1e4e:0102。这里的 ID 号可以在下一步 UVC 官方的文档中进一步确定是否被支持。

2. 用 ls /dev/video* 查看设备节点


这里的 video0 是笔记本自带的摄像头的设备节点, video1 才是我们刚接入的 USB 摄像头。

3. 在 windows 操作系统下插入 USB 摄像头插入,打开设备管理器

第一个 USB2.0 Camera 是我们接入的 USB 摄像头,第二个 USB2.0 UVCPC Camera 是笔记本自带的摄像头。

右键属性 -> 详细信息 –> 属性 选择硬件 ID 查看

可以得到插入的 USB 摄像头 VID:PID 为 1e4e: 0102 。 这里的 ID 号可以在下一步 UVC 官方的文档中进一步确定是否被支持。

14. 1.2 确定 USB 摄像头种类

通过这个文档《摄像头驱动VID+PID 大全》 来确定芯片类型,这个文件在附带的文件夹下;通过这个网页 http://www.ideasonboard.org/uvc/ 来查看是否支持 UVC,这个网站是 USB Video Class Linux device driver 的主页,里面有 UVC 的详细的介绍。根据前面的打印信息,根据自己的 ID 号, WEBEE 这里是搜索 USB 摄像头的 VID 号: 1e4e 和 PID 号: 0102。

通过摄像头的 ID,可以看到该摄像头是否支持 UVC 和其他信息。绿勾代表支持。



14.1.3 安装并使用 xawtv 测试 (Ubuntu 下)

1. 安装 xawtv 测试软件
#sudo apt-get install xawtv

2. 执行 xawtv 后面带 usb 摄像头的设备节点
#xawtv /dev/videoX


得到图像, PC 端测试结束。

14. 2 移植到 WEBEE210 开发板

确定 USB 摄像头在 PC 上可以用之后,就需要让它在我们的开发板也能用上这个摄像头。但是接入我们之前板子上的 USB 接口,发现内核却没显示 PC机上打印的信息。

这是因为 UVC 是 Microsoft 与另外几家设备厂商联合推出的为 USB 视频捕获设备定义的协议标准,目前已成为 USB org 标准之一。如今的主流操作系统(如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later)都已提供 UVC 设备驱动,因此符合 UVC 规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用,这也是上面说的免驱的意思。使用 UVC 技术的包括摄像头、数码相机、类比影像转换器、电视棒及静态影像相机等设备。

但是之前在我们板子上的内核并没有把这个驱动包含进来,所以现在为了能在板子上运行,有两种方法, 1.重新配置内核,把 UVC 编进内核,并测试是否可以用 2.自己从零写这个驱动。

因为这个 usb 摄像头涉及到了很多东西,从零写起来比较复杂,字里行间很难让大家理解,所以这里先用第一种方法实现,在后面的章节会分析内核的这个驱动,你也可以明白这个驱动的来龙去脉,再加上你自己的代码阅读和悟性,相信你可以搞懂的。 -.-

注:如果你买的是 webee 配套的摄像头直接跳到 14.3 

0. 好了,打开我们的内核目录

注:这里的内核是基于移植好 OHCI 主控制器的内核,用之前的内核配置好也是不能用的,因为 usb 主控制器是会被用到的。 请务必先看第 10 章并移植好内核,该实验需要此基础上开发。(或者可以在文件夹下用我们配置好 ohci 的内核)


#make menuconfig

1. 进入 USB support
Device Drivers --->
   [*] USB support --->

如图配置:



2. 选中 Multimedia support


Device Drivers --->
      <*> Multimedia support --->

如图配置:

3. 再进入 Media USB Adapters
Device Drivers --->
    <*> Multimedia support --->
         <*>Media USB Adapters --->

如图配置


注:如果你不想编译成模块,可以把 UVC 这一项改为*,之后就不用 insmod 了

4. 进入 V4L platform devices


Device Drivers --->

    <*> Multimedia support --->

           <*>V4L platform devices --->

如图配置



5. 编译内核


#make uImage

6. 编译模块并拷贝下面三个 ko 文件到文件系统下


#make modules
# cp ./drivers/media/v4l2-core/videobuf2-memops.ko /nfs/ko
# cp ./drivers/media/v4l2-core/videobuf2-vmalloc.ko /nfs/ko
#cp ./drivers/media/usb/uvc/uvcvideo.ko /nfs/ko

把生成的./arch/arm/boot/uImage 烧进开发板,重新启动,进行下一步。

14.3 官方淘宝店上摄像头的配置


如果你手头上和 Webee 一样有不知型号的摄像头,你可以按 14.2 节去试一下能不能用。但是如果你没有的话,强烈建议在我们官方的淘宝店购买 USB 摄像头, 也就是上面这一张

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux USB摄像头驱动【转】 的相关文章

  • OJ-合并两个有序链表

    题目描述 代码如下 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode mergeTwoLists s
  • 步进电机基础(5.6)-步进电机的驱动与控制-闭环控制

    步进电机基础 5 6 步进电机的驱动与控制 闭环控制 前言 基本信息 前言说明 5 6 闭环控制 前言 基本信息 名称 描述说明 教材名称 步进电机应用技术 作者 坂本正文 译者 王自强 前言说明 根据我读的 步进电机应用技术 这本书 进行
  • 自己动手写操作系统(一)

    本系列文章将一步步实现一个简单的操作系统 实验环境是在Linux系统下通过Bochs虚拟机运行我们自己写的操作系统 一 实验环境搭建 1 Ubuntu的安装 Windows用户可以选择在虚拟机中安装Ubuntu 具体安装教程可自行搜索 2
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • 内存管理——分页分段

    一 分页存储管理 1 页面与页框 1 页面 将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页加以编号 2 页框 相应于页面 把内存空间分成和页面相同大小的若干个存储块 称为 物理 块或页框 frame 3 页内碎片 在
  • Linux下进程退出的几种形式

    进程退出 Linux 下进程的退出分为正常退出和异常退出两种 1 正常退出 a 在main 函数中执行return b 调用exit 函数 c 调用 exit 函数 2 异常退出 a 调用about函数 b 进程收到某个信号 而该信号使程序
  • OS——文件管理系统磁盘的结构之搞清盘面和柱面

    如上图 每个柱面有三个盘面 即就是3个磁道 柱面可以抽象的理解成是一个套一个的立体的同心圆柱体 例 2019年408真题 磁盘有300个柱面 每个柱面有10个磁道 每个磁道有200个扇区 扇区大小为512B 则磁盘容量 分析 每个柱面有10
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • 物联锁项目失败原因分析

    一 背景 2022年3月份接手IM024物联锁项目救火 此项目主要用于医院共享轮椅 共享病床 此项目是从2021年初开始立项开发 投入了大量的人力物力 但是在2022年3月份时产品工作仍然不稳定 此项目基本上可以判定为一个失败的典型 为了吸
  • 二叉树结构的建立与遍历

    实验项目 1 编写建立二叉树的二叉链表存储结构 左右链表示 的程序 并以适当的形式显示和保存二叉树 2 完成二叉树的7种遍历操作 3 给定一个二叉树 编写算法完成下列应用 1 判断其是否为完全二叉树 2 求二叉树中任意两个结点的公共祖先 输
  • stm32 HAL库 Flash操作简介

    stm32 HAL库 Flash操作简介 目录 第一stm32 flash介绍 查看代码段 以判断代码长度 flash的基本操作规则 stm32 HAL库 Flash操作指南 stm32f1xx hal flash c stm32f1xx
  • 索引优化之Explain 及慢查询日志

    索引 本质是数据结构 简单理解为 排好序的快速查找数据结构 以索引文件的形式存储在磁盘中 目的 提高数据查询的效率 优化查询性能 就像书的目录一样 优势 提高检索效率 降低IO成本 排好序的表 降低CPU的消耗劣势 索引实际也是一张表 该表
  • Common块和Bss段的区别

    昨天看 程序员的自我修养 链接 装载与库 发现不是很理解为什么要用common块 然后仔细看了一番 有了自己的理解 common块 用来存放弱符号 而全局未初始化变量是弱符号 但是难道不是应该存放在 bss段吗 为什么要有common块呢
  • 32位的Ubuntu16.04安装QT5.8,并编译实现window环境下的代码

    开始 这是本人的第一篇博客 自己经常在网上找问题的解决方法 发现有些问题很难找到合适的解决方法 所以自己也写写 希望能帮助到大家 有错的地方大家指出 安装环境 linux环境 Ubuntu16 04 32位系统 使用apt get命令进行安
  • 使用ShellJS提升你的开发效率(一)

    Shelljs Unix shell commands for Node js Shelljs是Node js下的脚本语言解析器 具有丰富且强大的底层操作 Windows Linux OS X 权限 Shelljs本质就是基于node的一层
  • 3559摄像头

    input aoni Webcam as devices platform soc 12310000 xhci 1 usb1 1 1 1 1 1 0 input input0 yuv转 的代码 https github com 198708
  • 牛客剑指offer刷题其他算法篇

    文章目录 构建乘积数组 题目 思路 代码实现 第一个只出现一次的字符
  • 计算机基础:一颗芯片是怎样诞生的?

    一颗芯片是怎样诞生的 芯片属于半导体 半导体是介于导体和绝缘体之间的一类物质 元素周期表中硅 锗 硒 硼的单质都属于半导体 这些单质通过掺杂其他元素生成的一些化合物 也属于半导体的范畴 这些化合物在常温下可激发载流子的能力大增 导电能力大大
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位

随机推荐

  • Git Extension工具安装及使用

    以下界面所示的三个工具 如果没安装过 则勾上让其安装 MsysGit为Git的Windows版本 必须要安装 Kdiff为对比 合并工具 可选安装 可以换为使用其它的相关工具 最后一个Windows Credential Store for
  • java判断char是否相等

    在 Java 中可以使用 运算符来判断两个 char 类型的变量是否相等 例如 char c1 a char c2 b if c1 c2 System out println c1 is equal to c2 else System ou
  • 转:Python数据分箱,计算woe,iv

    转自 https zhuanlan zhihu com p 38440477 https www cnblogs com wzdLY p 9853209 html https github com Lucky Bone Discretiza
  • SQL语句的基本常用的一些语法

    1 ORDER BY 字段名 以 排序 如 select from A order by id desc 从大 gt 小 asc 从 小 gt 大 2 Group By 字段名 以 分组 select from A group by id
  • IOTDB-源码解析-查询

    单机查询流程 QueryPlan类 QueryPlan是有关查询相关的类 所有的plan都继承了PhysicalPlan这个虚类 QueryPlan也是一个虚类 其UML类图如下所示 IotDB中的各种reader 此章节请酌情参考查询基础
  • 白盒测试(基本路径法)代码

    白盒测试的一种常用方法是基本路径法 根据源代码构造程序流程图 转换为控制流图 得到基本路径 进而为每条基本路径设计测试用例 基本路径法的一个关键步骤是识别出所有的基本路径 本次作业要求你写一个C 程序 输入 待测程序的控制流图 输出 圈复杂
  • chisel环境安装

    step 0 把java装好 chisel依赖于java的 所以第一步你要装个java 去oracle官网去下载 下面网站 Java SE Development Kit 8 下载 www oracle com 如果你恰好家境贫寒 就下上面
  • 关于多项目使用Maven子工程无法使用

    前几天在网上找了一个商城的项目实战遇到一个问题 导入各种包但是Spring的核心配置文件还是全篇爆红 我自己记录一下我的解决方案 因为是多项目的问题 我当时创建文件的时候都把文件建在了Maven的parent目录下 所以无法导包进入 将每个
  • 【Unity基础】day1整理 -----小球吃金币

    小球 先搭一个场地Plane 命名Map 通过将四个墙的立方体归入Map 可以同时控制大小 分别赋予场地和墙的材质 创造一个小球Player 赋予材质和刚体 因为要实现键盘操作控制小球 因此需要写脚本挂载到Player上 using Sys
  • 基于粒子群算法的PID控制器优化设计(matlab实现)

    1 理论基础 PID控制器应用广泛 其一般形式为 可见 PID控制器的性能取决于Kp Ki Kd这3个参数是否合理 因此 优化PID控制器参数具有重要意义 目前 PID控制器参数主要是人工调整 这种方法不仅费时 而且不能保证获得最佳的性能
  • MySQL的C++封装

    最近的项目数据库管理系统从SQL SERVER2000迁移到了MySQL上来 之前基于ADO的连接方式连接上SQL SERVER 使用MySQL数据库管理系统之后 直接在MySQL的C语言的API上以面向对象的方式封装实现了数据库的创建 表
  • C语言操作EXCEL文件(读写)

    C语言操作EXCEL文件 读写 本文主要介绍通过纯C语言进行EXCEL的读写操作 修改时间2018 08 28 如果运行结果均是0 请看文章最后一节 C语言读操作 C语言写操作 在之前需要使用C语言读取Excel文件内容的功能 查阅了很多资
  • markdown 之项目目录文件结构展示

    一般来说 我们为项目写readme文档时 都会对整个目录的项目结构做个说明 例如这样的 我们可以用mddir来生成项目目录结构 mddir 使用命令 node mddir relative path 例子 打开终端或命令提示符 并cd进入m
  • ubuntu系统离线安装docker20.10.7版本及nvidia-container-runtime3.11.0-1版本(离线安装nvidia-docker)

    1 下载3个docker相关安装包 containerd io 1 4 6 1 amd64 deb docker ce cli 20 10 7 3 0 ubuntu xenial amd64 deb docker ce 20 10 7 3
  • HTTPS

    本文首发于我的个人技术博客 看完还不懂HTTPS我直播吃翔 存在即合理 http是非常常见的应用层协议 是超文本传输协议的简称 其传输的内容都是明文的 在这个混乱的世界 明文传输信息想想就可怕 网络 小混混 的手段远比我们这些凡人高明得多
  • SpringBoot2-5

    先解决一个问题 报错1 java 无效的目标发行版 17 修改位置 maven的配置需要改为选取本地maven所在目录 这些都是java指定了1 8比较低但是又都用的版本导致 再解决一个问题 报错2 java 无法访问org springf
  • 《小家:越住越大》

    第一章 二八定律 房子单价很贵 但却像人一样 慢慢被不必要的杂物堆积 变得杂乱 空间不足 人需要减肥 房子也需要减负 常用的东西 20 放在随手可及的地方 不常用的东西 80 合理收纳 这就是隐藏与显示的二八定律 收纳百分之八十的生活杂物
  • 阿里开源 Dragonwell JDK 重磅发布 GA 版本:生产环境可用

    今年 3 月份 阿里巴巴重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell 的消息 在很长一段时间内都是开发者的讨论焦点 该项目在 Github 上的 Star 数迅速突破 1400 近日 Dragonwell J
  • ADC0804的使用

    一 前言介绍 这个博客主要说明ADC0804的使用 数码管的动态显示作为辅助功能 方便观察 利用滑变和5V电源来获得一个输入电压值 输入到ADC0804的输入端 二 ADC0804芯片的介绍 1 A D转换概念 即模数转换 输入模拟量 比如
  • Linux USB摄像头驱动【转】

    本文转载自 http www itdadao com articles c15a509940p0 html 在 cortex a8 中 可接入摄像头的接口通常可以分为两种 CAMERA 接口和 USB 接口的摄像头 这一章主要是介绍 USB