DMA结构:

struct saa7146_video_dma {

u32 base_odd;

u32 base_even;

u32 prot_addr;

u32 pitch;

u32 base_page;

u32 num_line_byte;

};

工作流程

v4l2_extension调用v4l2_register_device()函数注册设备,V4l2_register_device()函数进而调用v4l2_init_done()函数(v4l2_device结构中的int(*initialize)()字段已被初始化为该函数)通过写 I/O地址空间具体的初始化设备,设置采集图像的默认参数等。这时候设备已经做好了采集图像的准备工作。

下面通过典型的read一桢图像来分析具体的工作流程:

应用程序首先调用系统调用open()来打开设备,v4l2将该调用映射为初始化设备时已经设置好的v4l2_device结构中的 int(*open)(),在本文中即为v4l2_open();打开设备成功read一桢图像数据的命令,此时系统通过v4l2_device结构中已经设置好的int(*open)()字段调用相应的函数v4l2_read(),该调用负责分配内核内存缓冲区,并将采集到的数据从内核空间复制到用户空间,这样应用程序就获得了一桢数据;

当v4l2_capability结构中的V4L2_CAP_STREAMING标志被设置时,这表明设备支持流采集。V4L2 的流驱动程序维护两个组织成FIFO的缓冲区队列:发送队列和接收队列。由于应用程序受到网络延迟,进程抢占或随机磁盘存储的影响,维护两个队列就可以把异步的视频采集或输出操作与应用程序分离开,从而降低丢失数据的可能性。设备采集到图像后可以用DMA 方式直接将数据放入应用程序分配好的缓冲区中,这就大大提升了整个系统的性能。

4.2.3 测试驱动程序[6]

首先编译上述模块,然后通过命令insmod链接进内核。用于测试的简单应用程序主体部分如下所示:

vid = open(device, O_RDONLY);/*打开设备*/

err = ioctl(vid, VIDIOC_QUERYCAP, cap); /*查询设备支持的功能*/

err = ioctl(vid, VIDIOC_G_FMT, fmt);/*设置采集图像的格式*/

data = malloc(fmt.fmt.pix.sizeimage);/*分配用户空间缓冲区*/

n = read(vid, data, fmt.fmt.pix.sizeimage);/*获取一桢数据*/

该应用程序运行后经检查得到了预期的结果,并且在基于该驱动程序的CDMA无线视频传输系统中满足了应用的需要,获得了理想的效果。

5 结论

本文作者创新点:详细阐述了Linux环境下利用V4L2API开发视频采集设备驱动程序的流程,并将该驱动程序实际的应用到我们自己研发的CDMA无线视频传输系统中,获得了满意的实时效果,在此也希望对从事同类开发的人员有所裨益。

参考文献

1 Alessandro Rubini Jonathan Corbet,Linux device driver,2nd Edition,O’Reilly,2001.7

2 Philip SAA7146A datasheet,1998.4

3 Philip SAA7111A datasheet,1998.5

4 http://linux.bytesex.org/v4l2/

5 PCI SIG,PCI Local Bus Specification Revision 2.2,1998.12

6 王多智,嵌入式linux下sram驱动程序的开发原理及应用,微计算机信息,2005年第5期

linux 图像采集卡驱动程序,基于Linux操作系统的视频采集卡驱动程序设计相关推荐

  1. linux 嵌入式 快照_基于Linux的嵌入式启动优化的研究

    基于Linux的嵌入式启动优化的研究 论文 开题分析 周报 启动 基于Linux嵌入式系统启动加速的研究 一. 所选课题的目的和意义 随着科学技术的蓬勃发展,计算机被更多的人使用,并与人类对额生活结合 ...

  2. linux dhcp 论文,毕业论文—基于linux的dhcp服务器配置.doc

    毕业论文-基于linux的dhcp服务器配置 基于Linux的DHCP服务器配置 摘 要 随着互联网的普及,人们的工作.学习和生活与网络联系越来越紧密,搭建了许多不同的网络,如企业网.校园网和城区网等 ...

  3. 基于S3C2410的触摸屏驱动程序设计

    基于S3C2410的触摸屏驱动程序设计   作者:沈阳农业大学 关键词:  ADS7843  S3C2410  触摸屏  嵌入式Linux  消费电子  触摸屏  消费电子 摘要: 本文介绍了基于三星 ...

  4. linux红外驱动程序,基于Linux操作系统和红外发射器实现系统模块的设计

    引 言 随着嵌入式系统及集成电路技术的飞速发展,针对移动手持终端的专用芯片获得了长足发展.芯片的RAM和ROM的容量越大,在上面跑操作系统也越来越容易.Linux是当今流行的操作系统之一.由于其内核健 ...

  5. linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计

    电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...

  6. linux 采集卡 设备名,嵌入式Linux视频采集卡的设计

    摘要:以嵌入式微处理器$3C2410为硬件核心,以Linux操作系统为软件平台,选择网眼PC350为摄像头,设计了一的视频采集卡,实验结果表明,该系统采集到的图像清晰,可以适应不同场合的需要. 关键词 ...

  7. linux文件系统的设计,基于Linux的文件系统设计.doc

    PAGE PAGE 33 无敌 操作系统课程设计 说 明 书 ? 学 院.系: 软件学院 专 业: 软件工程 学 生 姓 名: 学 号: 设 计 题 目: 基于Linux的模拟文件系统的设计与实现 起 ...

  8. linux内核实时调度,基于Linux内核的实时调度机制的研究和实现

    摘要: 实时操作系统在当前的各个领域得到广泛应用,越来越引起人们的重视.Linux操作系统的源代码开放.内核模块化设计及内核的高度可裁减性使其在嵌入式实时操作系统研究领域备受重视.但其面向通用多任务分 ...

  9. linux arm关闭光栅,基于Linux的光栅检测系统的软件设计与实现.pdf

    基于Linux的光栅检测系统的软件设计与实现.pdf - - - - - - - - - - 一 竣 应 ((_- 基 于 Linux 系 统 的 软 件 设 计 与 实 现 东北大学信息科学与工程学 ...

最新文章

  1. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
  2. 下一个全球电子通道系统,一定是BCH!
  3. 埋点全解 2:iOS 应用程序状态
  4. ios AFNetworking 有用篇
  5. 高精度倾斜摄影建模解决方案
  6. RabbitMQ之mandatory和immediate
  7. 服务器实际显示内存,服务器实际显示内存
  8. SQLite在字符串比较中的大小写问题
  9. 统计某个路径下的总文件个数,及总行数(不含空行)
  10. Nginx 关于 location 的匹配规则详解
  11. 坚果云云盘告诉你如何保护自己的文件不被泄露?
  12. 项目中Makefile写法的一种参考
  13. uniny 物体运动到一个点停止_unity控制运动
  14. 再探阿里的“数据+业务”双中台架构
  15. 语音信号处理 | Python实现端点检测
  16. Dialog 无法隐藏软键盘
  17. 基于深度学习的图像超分辨率方法 总结
  18. html设置pdf预览名字,浏览器预览PDF文件的个性化设置
  19. python初步学习(二) 3.19
  20. 抢先服显示服务器关闭是什么意思,王者荣耀抢先服是什么意思 抢先服和正式服的区别...

热门文章

  1. 拿到月薪20k的前端工程师简历是什么样的?
  2. 私人云储存解决方案——可道云kodexplorer【零成本】
  3. [JS代码]常用JS网页广告代码
  4. Mysql表单自增id自定义规则,用LPAD/RPAD就够了
  5. ORACLEL临时表空间扩张
  6. 盖达尔的旗帜 php,【盖达尔的旗帜】突然的感动!良心定制!蛇皮AF1开箱!
  7. Linux命令:ls的实现
  8. java编程输入学生成绩 判断最高分,java代码初学者适用,输入学生成绩,符合要求的过~~~~注意数据范围...
  9. mysql 数据类型 java_[mysql]MySql数据类型和java类型对照表
  10. 有点想法系列:借助海尔平台打造智能家居的一点想法