本文基于AM6C平台Linux3.0.8内核。

1.drivers/media/video/uvc/Makefile

uvcvideo-objs := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o \

uvc_status.o uvc_isight.o

obj-$(CONFIG_USB_VIDEO_CLASS) += uvcvideo.o

2.drivers/media/video/uvc/uvc_driver.c

module_init(uvc_init);

static int __init uvc_init(void){

......

result = usb_register(&uvc_driver.driver);

......

}

struct uvc_driver uvc_driver = {

.driver = {

.name = "uvcvideo",

.probe = uvc_probe,

.disconnect = uvc_disconnect,

.suspend = uvc_suspend,

.resume = uvc_resume,

.reset_resume = uvc_reset_resume,

.id_table = uvc_ids,

.supports_autosuspend = 1,

},

};

static int uvc_probe(struct usb_interface *intf,const struct usb_device_id *id){

......

uvc_register_chains(dev);

......

}

static int uvc_register_chains(struct uvc_device *dev){

......

ret = uvc_register_terms(dev, chain);

......

}

static int uvc_register_terms(struct uvc_device *dev,struct uvc_video_chain *chain){

......

ret = uvc_register_video(dev, stream);

......

}

static int uvc_register_video(struct uvc_device *dev,struct uvc_streaming *stream){

......

vdev = video_device_alloc();

......

vdev->v4l2_dev = &dev->vdev;

vdev->fops = &uvc_fops;

vdev->release = uvc_release;

......

ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1);

......

}

3.drivers/media/video/uvc/uvc_v4l2.c

const struct v4l2_file_operations uvc_fops = {

.owner = THIS_MODULE,

.open = uvc_v4l2_open,

.release = uvc_v4l2_release,

.unlocked_ioctl = uvc_v4l2_ioctl,

.read = uvc_v4l2_read,

.mmap = uvc_v4l2_mmap,

.poll = uvc_v4l2_poll,

#ifndef CONFIG_MMU

.get_unmapped_area = uvc_v4l2_get_unmapped_area,

#endif

};

static long uvc_v4l2_ioctl(struct file *file,unsigned int cmd, unsigned long arg){

......

return video_usercopy(file, cmd, arg, uvc_v4l2_do_ioctl);

}

static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg){

......

switch (cmd) {

case VIDIOC_QUERYCAP:......

case VIDIOC_QUERYCTRL:

case VIDIOC_G_CTRL:

case VIDIOC_S_CTRL:

case VIDIOC_QUERYMENU:

case VIDIOC_G_EXT_CTRLS:

case VIDIOC_S_EXT_CTRLS:

case VIDIOC_TRY_EXT_CTRLS:

case VIDIOC_ENUMINPUT:

case VIDIOC_G_INPUT:

case VIDIOC_S_INPUT:

case VIDIOC_ENUM_FMT:

case VIDIOC_TRY_FMT:

case VIDIOC_S_FMT:

case VIDIOC_G_FMT:

case VIDIOC_ENUM_FRAMESIZES:

case VIDIOC_ENUM_FRAMEINTERVALS:

case VIDIOC_G_PARM:

case VIDIOC_S_PARM:

case VIDIOC_CROPCAP:

case VIDIOC_G_CROP:

case VIDIOC_S_CROP:

case VIDIOC_REQBUFS:

case VIDIOC_QUERYBUF:

case VIDIOC_QBUF:

case VIDIOC_DQBUF:

case VIDIOC_STREAMON:

case VIDIOC_STREAMOFF:

case VIDIOC_ENUMSTD:

case VIDIOC_QUERYSTD:

case VIDIOC_G_STD:

case VIDIOC_S_STD:

case VIDIOC_OVERLAY:

case VIDIOC_ENUMAUDIO:

case VIDIOC_ENUMAUDOUT:

case VIDIOC_ENUMOUTPUT:

case __UVCIOC_CTRL_ADD:

case __UVCIOC_CTRL_MAP_OLD:

case __UVCIOC_CTRL_MAP:

case UVCIOC_CTRL_MAP:

case __UVCIOC_CTRL_GET:

case __UVCIOC_CTRL_SET:

case UVCIOC_CTRL_QUERY:

......

}

......

}

linux uvc摄像头操作,Linux uvc摄像头驱动初探相关推荐

  1. linux c文件操作,Linux C 文件的输入/输出操作

    10.1 文件I/O操作概述 在Linux系统中,文件I/O操作可以分为两类,一类是基于文件描述符的I/O操作,另一类是基于数据流的I/O操作. 10.1.1 文件描述符简介 在文件操作一章中,也经常 ...

  2. linux v4l2 反操作,Linux下V4L2编程小结--吴老师

    作者:武汉华嵌-嵌入式培训中心  吴老师 Linux下V4L2编程小结 一.设置采集方式,格式 常用命令标志 打开视频设备后,可以设置该视频设备的属性,例如裁剪.缩放等.这一步是可选的.在Linux编 ...

  3. linux文件怎么操作,linux文件操作学习1

    由于实验室的项目需要开始学习linux,为了更好的学习和掌握linux的一些基本操作以及顺便做个备忘录,时间久了也可以看看自己的学习成果. 学习linux应该先抛开windows的C.D.E...盘的 ...

  4. linux 文档操作,Linux学习之文档操作

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? The Linux Command Line 学习翻译 mkdir The mkdir command is used ...

  5. linux系统常见操作,Linux系统基本操作

    我们可以认为Linux是一套自由使用的类Unix操作系统,与Windows相比较而言,Linux具有安全.开源.稳定等特点.下面我来介绍Linux中一些的登录登出基本操作. 1. 启动系统 通常LIL ...

  6. linux 内核文件操作,Linux 内核文件操作

    正常思路是应用里读取文件内容,再通过ioctl.write等方式把文件buffer传送到内核,内核里不推荐使用对文件IO直接操作,但是要使用还是可以的. 思路如下: 一.filp_open打开获取句柄 ...

  7. linux 进程的操作,linux进程操作命令

    linux进程操作命令 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 简单概述简单概述 Linux 进程操作命令进程操作命令Lin ...

  8. linux文件编辑操作,Linux下文本编辑及其文件操作

    文本编辑及其文件操作 Vim 命令模式: dd 删除当前行 yy 2yy nyy 复制 从光标算起,复制n行 p 粘贴 默认粘贴在光标的下一行 u 撤销 末行模式: :wq 保存退出 :wq! 强制保 ...

  9. linux下字符串操作,Linux Bash 中字符串操作

    所谓"子字符串"就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有 ...

最新文章

  1. 算法导论之用于不相交集合的数据结构
  2. Docker最全教程——从理论到实战(四)
  3. sublime设置自己的快捷键
  4. mui实现手机web前端拍照_Web前端中的常见技术名称及所实现的功能
  5. Oracle实现数据不存在则插入,数据存在则更新(insert or update)
  6. 玩转html5(三)---智能表单(form),使排版更加方便
  7. 阿里开源 10 年,这封信里也有 Flink 的身影。
  8. STM32固件库下载步骤
  9. 写给非网工的CCNA教程(4)聊聊ping命令后的原理(续)
  10. 贪吃蛇c语言代码vc,纯C语言实现贪吃蛇游戏(VC6.0)
  11. 云风专访|近40年码龄,从通宵写代码到三思而后行
  12. android经纬度查询,Android - 经纬度获取
  13. 微信公众号关注渠道来源
  14. 网络安全面试、实习、校招经验打包分享
  15. Uva 11201麻球繁衍(设概率方程的技巧)
  16. 十八年努力,我才能与你一起喝咖啡(转于《读者》)
  17. 【Linux C语言查看SD卡大小】
  18. UCA-系统工程师学习-使用dpkg管理软件包
  19. 超详细: 使用 OpenSSL 命令行管理证书
  20. 中小企业怎样搭建软件安全开发流程和规范

热门文章

  1. CAD三维模型下载网站
  2. v-if中调用函数的问题
  3. 2019.7.2【PMP项目管理er日报】
  4. 【HGE 教程04】游戏地图绘制 平面地图
  5. 数学建模——种群竞争模型
  6. 深度学习在自然语言处理中的应用: 集智俱乐部活动笔记
  7. 微软数字签名工具--SigCheck的应用
  8. 电脑如何定位苹果手机
  9. SAP MIGO 传输过账时接收物料字段控制
  10. c++ 解析eps文件