Linux下USB摄像头驱动开发(1)

原创 2007年09月11日 17:14:00

 

       今年上半年我对市场常见的vimicro 摄像头移植了Linux下的驱动至在研的一款嵌入式开发板,开发环境为:

            OS:Linux2.6.9

Compile:cross 3.3.2

CPU:Intel PXA270

Camera Type :Vimicro ZC301P +HV7131R

使用的驱动源码基于自由软件spca5xx。基于源码作了些小改动。记录一下。

  1. Linux下的USB驱动架构

Linux下完整的USB驱动程序必须包括3个模块:USB coreUSB 主控制器驱动,USB设备驱动。三者的关系如下:

其中:

Linux Core封装了支持USB主控制器和USB设备驱动的API,通过一系列的数据结构、宏、函数来抽象化设备硬件并掩蔽硬件具体细节,使得Linux系统对USB设备的访问采用如同一般文件访问类似的接口函数,如此实现了硬件无关。“设备即是文件”。

USB HCHost Controller)全面负责主机端对USB的信息传输分工,对下注册功能和相关数据结构;对上提供了设备驱动与USB Core数据传输的桥梁。USB上的实时流数据传输通常通过URBUSB Request Block)的数据结构实现,每一次数据传输中,设备驱动建立URB,提交给USB HCUSB HC负责完成此次与设备端的URB交互。

  1. USB驱动程序的结构

struct usb_driver spca5xx_driver

struct video_device spca50x_template

struct file_operations spca5xx_fops

  1. 模块初始化与卸载

spca5xx_init()模块初始化;spca5xx_disconnect()模块卸载;spca5xx_probe() 物理设备查找、匹配、配置,并向内核注册video设备。

  1. 系统调用接口

spca5xx_open()完成设备的打开和初始化,并初始化解码器模块,spca5xx_close()完成设备的关闭;

spca5xx_read()完成数据的读取,其主要的工作就是将数据由内核空间传送到进程用户空间;

spca5xx_mmap()实现将设备内存映射到用户进程的地址空间的功能;

spca5xx_ioctl()实现文件信息的获取功能。

  1. 数据传输

spca50x_reg_write

  1. 摄像头数据传输过程

USB总线上信息传输类型可分成控制、中断、等时、成块四种:其中控制型主要用于设备的“配置”与控制;中断型主要用于主机对USB设备的周期性查询;实时性使用与实时的音视频信号传输;成块型用于信息量大,没有很强的时间要求,但要求可靠传递的应用。对摄像头而言,通常采用的是实时传输。USB设备端提供若干通信端口(port),主机与端口间建立起逻辑上的通信管道,进行数据传输。在摄像头的设备初始化阶段,主机与0号端口通信,驱动程序检测摄像头型号和所有端口信息;进入数据传输阶段,主机与探测到的实时输入端口建立通信管道,实时回传摄像头拍摄到的图像数据。

USB主机控制器把每秒总线时间分成1024个固定大小的frame,每个frame占据1ms的时间带宽并以此为时间单位递增,同时对应一个等时交互队列。主机负责把USB总线上回传的等时图像数据流量分配给各frameUSB主机控制器每一秒钟扫描一遍所有frame,依次读入各frame携带的等时数据包至内核缓冲区中。应用程序通过内存映射,在用户空间直接读取内核缓冲区内容,存入Linux显存帧缓冲(framebuffer)中,从而在显示屏中出现图像数据。

笔者的实验摄像头为Vimicro ZC301P,sensorHV7131R,驱动程序中每秒钟进行2URB传输,每个URB携带161023字节的数据包,这样每秒钟所能得到的图像数据大小为32Kbyte。对RGB565、大小320×24016位颜色深度的图像格式,在PXA270处理器的嵌入式开发板上测试,帧速达到每秒17帧,完全满足嵌入式网络实时视频会议的需要。

  1. 提高摄像头工作质量的几种方法
  • URB
  • 双帧缓冲
  • V4L协议改进

zhaoyang

linux Camera 驱动调试

工作需要更换摄像头Sensor,客户选了原盛的一颗芯片PAS6376,不知道是因为他们公司芯片出覆盖度不大还是什么原因,linux系统中居然没有他们的驱动,类似的也没有。 原厂给了一个初始化程序,随后...
  • li_wen01
  • li_wen01
  • 2016年12月29日 17:28
  • 762

Linux下摄像头驱动

 Linux下摄像头驱动不多,现在比较流行的好像就是那个法国大胡子开发的那个spca5xx,我也来安装一下试试。 先把摄像头插上,按照人家说的lsusb一把,来查看一下,唉,怎么没有这个命令,g之,...
  • Roy_Xu
  • Roy_Xu
  • 2007年12月03日 16:16
  • 4077

Linux系统下USB摄像头驱动开发

        一、 Linux系统中的USB摄像头驱动程序USB摄像头以其良好的性能和低廉的价格得到广泛应用。同时因其灵活、方便的  ...
  • fengyv
  • fengyv
  • 2006年05月22日 18:00
  • 11910

linux下罗技摄像头驱动

  • 2010年09月10日 17:21
  • 38KB
  • 下载

linux 在线调试摄像头驱动

在使用嵌入式linux设备做点到点之间的图像传输,比如linux平台采集摄像头数据,然后通过wifi或是蓝牙等设备将图像数据发送到手机端,最后使用手机显示出图像。图像处理和图像传输是在应用层完成,在应...
  • li_wen01
  • li_wen01
  • 2017年01月20日 15:37
  • 1297

Linux 下摄像头驱动支持情况(arm linux 同样适用)

http://blog.csdn.net/leo115/article/details/7331349 我要做一个s3c6410 的摄像头视频采集的项目,由于我接手的这套开发板,内核...
  • Stephen_yu
  • Stephen_yu
  • 2016年11月21日 22:38
  • 1570

摄像头驱动程序 Arm-Linux摄像头驱动程序的移植

移植过程所使用的摄像头型号ZC301P,arm板上的内核版本为2.6.9,开发板为pxa270,所采用的驱动程序包为spca5xx-20060501.tar.gz。   Arm开发板上摄像头的移植有两...
  • yinzhouna
  • yinzhouna
  • 2010年12月11日 11:16
  • 798

Linux usb摄像头驱动

  • 2017年05月30日 19:59
  • 218KB
  • 下载

万能摄像头驱动 for linux

  • 2008年11月28日 16:49
  • 189KB
  • 下载

使用 Video4Linux 采集USB摄像头的图像,并保存到一张 jpg图像文件中的程序

最近想做一个  使用 video4linux2(注意不是 video4linux )采集 usb 摄像头上的图像的程序,网上找了一个源码,运行成功,分享过程。 程序编译时直接使用 gcc -o te...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2014年03月21日 22:52
  • 4132
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: Linux下USB摄像头驱动开发(1)
举报原因:
原因补充:

(最多只允许输入30个字)