移动物体监控系统(2)—摄像头子系统开发

一、摄像头驱动开发

1.摄像头驱动架构

  • 视频监控本就是嵌入式Linux的重要应用场合,所以如何合理高效的管理摄像系统,便成为嵌入式Linux一大热点!当前最流行的摄像头软件架构就是V4L2架构,从字面意思知道是专门为Linux设计的一个视频子系统的第二个版本。V4L2有一段历史了。早在1998的时候就出现了,经过长足的发展,它于2002年11 月,发布2.5.46 时,融入了内核主干之中。然而直到今天,仍有一部分内核驱动不支持新的API,这种新旧API 的转换工作仍在进行。它的主要功能是使程序具有发现设备和操作设备的能力.它主要是用一系列的回调函数来实现这些功能。像设置摄像头的频率、帧频、视频压缩格式和图像参数等等。当然也可以用于其他多媒体的开发,如音频等。但是该架构目前只能用于Linux操作系统上。整个V4L2的架构示意图如下:

  • 可以看出,整个架构主要分为四个部分:
    • 用户空间的应用程序:比如后面要用到的Motion以及ffmpeg等开源应用程序
    • V4L2核心组件(驱动核心):这是Linux内核专门用来管理视频子系统的核心组件,也正是由于这个组建的存在,才让我们可以在用户空间使用统一的一套编程接口API去控制底层的不同硬件。
    • 具体的V4L2驱动:这部分主要是针对不同的摄像头有不同的驱动程序,这写驱动程序相互独立,但是共同注册到V4L2子系统下,以便和用户空间应用程序进行通信。
    • 底层硬件:就是实际的摄像头等物理硬件。
  • V4L2核心是Linux系统自带的组件,它可以屏蔽摄像头驱动层的差异,不管底层的摄像头有什么差异,上层应用统一调用V4L2来实现对摄像头的操作,因此驱动程序和应用程序都需要遵循V4L2规范。

2.摄像头驱动使能

  • 由于本项目采用的是基于ZC3XX系列芯片的USB摄像头,所以需要在内核里面添加该USB摄像头驱动。以后如果换成别的摄像头,根据自己摄像头的驱动芯片加载合适的驱动模块到内核即可,毕竟现在Linux支持了市面上大部分的摄像头,一般能购买到的摄像头都有相应的驱动程序,只需要自己在内核使能即可!按照如下步骤可以使能USB摄像头。

2.1 进入配置菜单

  • 在内核源代码顶层目录执行 make menuconfig ARCH=arm命令。进入配置菜单。

2.2 依次选择如下配置选项:

  • Device Drivers  --->(毫无疑问,只要是添加驱动都是要进入这个选项)
  • Multimedia devices  --->(显然视频摄像头属于多媒体范畴)
    • [*]   Video capture adapters  --->(视频捕获也即是摄像头)
      •  [*]   V4L USB devices  --->(我们采用的是USB摄像头)
        •   <*>   GSPCA based webcams  --->(万能摄像头驱动)
          •  <*>   ZC3XX USB Camera Driver(我们采用的具体USB摄像头对应的驱动程序)

2.3 保存配置文件,退出配置模式,开始编译新内核

  • #make uImage ARCH=arm CROSS_COMPILE=arm-linux-
  • 拷贝uImage到/tftpboot/目录下

2.4 下载并启动linux内核

  • 往开发板上插入摄像头后,会弹出相应提示,同时使用ls /dev/可以查看是否有vedeo的驱动文件,如果有则说明驱动开发成功。

3. 摄像头驱动测试

3.1 初步测试

  • 插上USB摄像头看开发板串口控制台的提示,有如下信息输出:

  • 由上面的提示信息我们知道,驱动使能成功,再通过ls命令查看dev目录下的设备文件,即ls  /dev有:

  • 表明我们的USB摄像头在开发板的系统里创建的对应设备文件是/dev/video0,当然读者要根据自身实际情况判断对应的设备文件是什么,有可能是video3,video4等。

3.2 编写应用程序进行测试

  • 使用camera.c(下接会讲如何编写)文件交叉编译出在开发板运行的测试应用程序。在编译之前要记得修改文件里打开的设备文件,也就是前面说的/dev/video0,根据再记得设备文件修改open函数,如果传递给你open函数的参数不是你摄像头对应的实际设备文件,那么打开会有无法预知的结果,有可能失败,也可能打开某个文件导致抓取的图片是空的等情况。修改完毕以后使用如下命令进行编译:arm-linux-gcc -g camera.c -o  camera
  • 得到的camera就是可执行文件,将他复制到开发板的文件系统的根目录,并在开发板的串口控制台执行./camera命令,Mini2440有如下提示:

  • 同时在根目录生成test.jpg文件,通过windows的samba可以查看 其效果如下所示:

二、V4L2图像编程接口深度学习

1.相关介绍

  • Video for Linuxtwo(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。
  • 在Linux下,所有外设都被看成一种特殊的文件,称为设备文件,可以象访问普通文件一样对其进行读写。一般来说,采用V4L2驱动的摄像头设备文件是/dev/video0。V4L2支持两种方式来采集图像:内存映射方式(mmap)和直接读取方式(read)。V4L2在include/ linux/videodev.h文件中定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。Linux系统V4L2的能力可在Linux内核编译阶段配置,默认情况下都有此开发接口。
  • 摄像头所用的主要是capature了,视频的捕捉,具体linux的调用可以参考下图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值