Linux USB摄像头驱动【转】

本文转载自: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 摄像头ÿ

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值