linux uvc摄像头操作,Linux uvc摄像头驱动初探
本文基于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摄像头驱动初探相关推荐
- linux c文件操作,Linux C 文件的输入/输出操作
10.1 文件I/O操作概述 在Linux系统中,文件I/O操作可以分为两类,一类是基于文件描述符的I/O操作,另一类是基于数据流的I/O操作. 10.1.1 文件描述符简介 在文件操作一章中,也经常 ...
- linux v4l2 反操作,Linux下V4L2编程小结--吴老师
作者:武汉华嵌-嵌入式培训中心 吴老师 Linux下V4L2编程小结 一.设置采集方式,格式 常用命令标志 打开视频设备后,可以设置该视频设备的属性,例如裁剪.缩放等.这一步是可选的.在Linux编 ...
- linux文件怎么操作,linux文件操作学习1
由于实验室的项目需要开始学习linux,为了更好的学习和掌握linux的一些基本操作以及顺便做个备忘录,时间久了也可以看看自己的学习成果. 学习linux应该先抛开windows的C.D.E...盘的 ...
- linux 文档操作,Linux学习之文档操作
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? The Linux Command Line 学习翻译 mkdir The mkdir command is used ...
- linux系统常见操作,Linux系统基本操作
我们可以认为Linux是一套自由使用的类Unix操作系统,与Windows相比较而言,Linux具有安全.开源.稳定等特点.下面我来介绍Linux中一些的登录登出基本操作. 1. 启动系统 通常LIL ...
- linux 内核文件操作,Linux 内核文件操作
正常思路是应用里读取文件内容,再通过ioctl.write等方式把文件buffer传送到内核,内核里不推荐使用对文件IO直接操作,但是要使用还是可以的. 思路如下: 一.filp_open打开获取句柄 ...
- linux 进程的操作,linux进程操作命令
linux进程操作命令 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 简单概述简单概述 Linux 进程操作命令进程操作命令Lin ...
- linux文件编辑操作,Linux下文本编辑及其文件操作
文本编辑及其文件操作 Vim 命令模式: dd 删除当前行 yy 2yy nyy 复制 从光标算起,复制n行 p 粘贴 默认粘贴在光标的下一行 u 撤销 末行模式: :wq 保存退出 :wq! 强制保 ...
- linux下字符串操作,Linux Bash 中字符串操作
所谓"子字符串"就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有 ...
最新文章
- 算法导论之用于不相交集合的数据结构
- Docker最全教程——从理论到实战(四)
- sublime设置自己的快捷键
- mui实现手机web前端拍照_Web前端中的常见技术名称及所实现的功能
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- 玩转html5(三)---智能表单(form),使排版更加方便
- 阿里开源 10 年,这封信里也有 Flink 的身影。
- STM32固件库下载步骤
- 写给非网工的CCNA教程(4)聊聊ping命令后的原理(续)
- 贪吃蛇c语言代码vc,纯C语言实现贪吃蛇游戏(VC6.0)
- 云风专访|近40年码龄,从通宵写代码到三思而后行
- android经纬度查询,Android - 经纬度获取
- 微信公众号关注渠道来源
- 网络安全面试、实习、校招经验打包分享
- Uva 11201麻球繁衍(设概率方程的技巧)
- 十八年努力,我才能与你一起喝咖啡(转于《读者》)
- 【Linux C语言查看SD卡大小】
- UCA-系统工程师学习-使用dpkg管理软件包
- 超详细: 使用 OpenSSL 命令行管理证书
- 中小企业怎样搭建软件安全开发流程和规范