彻底分析虚拟视频驱动vivi(三)】的更多相关文章

在Ubuntu系统中接上usb摄像头设备时,系统会自动安装对应的usb设备驱动程序.我们现在要使用自己编译的vivi驱动,该怎么办呢? 1.先安装系统自带的vivi驱动和它所依赖的所有驱动:sudo modprobe vivi ; 2.卸载原有的vivi驱动 : sudo rmmod vivi ; 3.装载自己的驱动 :sudo insmod ./vivi.ko ;然后 ls /dev/video* ,可以看到有一个video设备节点 /dev/video0 ,即对应的是vivi虚拟出来的视频设…
转自:http://www.cnblogs.com/tureno/articles/6694463.html 转载于: http://blog.csdn.net/lizuobin2/article/details/53006927 本文基于:linux3.5 前面一篇文章中,简单分析了 V4L2 大框架,本文借助内核中的虚拟摄像头驱动 vivi 来分析一个完整的摄像头驱动程序.vivi 相对于后面要分析的 usb 摄像头驱动程序,它没有真正的硬件相关层的操作,也就是说抛开了复杂的 usb 层的相…
1.分配video_device结构体 2.设置 3.注册  video_register_device 分析vivi.c: vivi_init( )//入口函数 vivi_create_instance() ret = v4l2_device_register(NULL, &dev->v4l2_dev); /*注意dev->v4l2_dev在该函数v4l2_device_registe中被设置,这个结构体在后边将被用到. ,这个函数只是做了某些初始化的工作,并没有什么注册 */  v…
学习目标:在linux终端安装xawtv,并测试vivi.ko驱动程序. 一.安装xawtv 1)ubuntu能上网情况下,使用命令:# sudo apt-get install xawtv 2)如果不能上网,需要先下载源码:xawtv-3.95.tar.gz: http://www.kraxel.org/releases/xawtv/ 步骤: 在这个网站创建新的sources.list 地址:http://repogen.simplylinux.ch/a. 选择国家b. 选择相邻的ubuntu…
一.V4L2框架主要结构体分析 V4L2(video for linux version 2),是内核中视频设备的驱动框架,为上层访问视频设备提供统一接口. V4L2整体框架如下图: 图中主要包括两层和三个结构体: 两层是: 1. v4l2驱动核心层:包含video_device和v4l2_device的分配.设置和注册 2. v4l2下层接口层:具体的底层传感器驱动,现在的摄像头可能支持硬件解码,这就需要在摄像头驱动下面提供解码器IC驱动 三个结构体是: 1. v4l2_device: str…
概述 前面简单分析了内核中虚拟摄像头驱动 vivi 的框架与实现,本文参考 vivi 来写一个虚拟摄像头驱动,查询.设置视频格式相对简单,难点在于 vb2_buf 的处理过程. 数据采集流程分析 在我的程序中,大概的数据采集流程如上图所示,启动视频采集之后,创建了一个内核线程,内核线程每30ms 唤醒一次,每一次唤醒都会尝试用 queue_list 中取出一个 buffer 填充数据之后挂入 done_list ,挂入 done_list 之后就会唤醒应用程序(poll 中休眠),应用程序唤醒之…
前面的几篇文章已经分析了v4l2的框架,对框架的分析是比较粗浅的,能基本清楚函数之间的调用过程.但是很多内容并没有分析,比如说里面有很多ioctl,并没有分析哪些ioctl是必须的,也没有分析如何从应用程序去获得摄像头数据.在本篇文章中,将根据虚拟驱动vivi的使用彻底分析摄像头驱动. 要想分析使用过程,必须得到应用程序的源码.xawtv的源码可以从 http://www.kraxel.org/releases/xawtv. 在我们进行分析源码的时候,当然可以从xawtv的main函数进行分析,…
Linux摄像头驱动学习之:(二)通过虚拟驱动vivi分析摄像头驱动 一.通过指令 "strace -o xawtv.log xawtv" 得到以下调用信息: // 1~7都是在v4l2_open里调用 1. open 2. ioctl(4, VIDIOC_QUERYCAP // 3~7 都是在get_device_capabilities里调用 3. for() ioctl(4, VIDIOC_ENUMINPUT // 列举输入源,VIDIOC_ENUMINPUT/VIDIOC_G_…
本文主要从用户,公司和技术角度分析美女视频直播这个行业,文章最早发表在我们的微信公众号上,支持原创,详见这里, 欢迎关注微信公众号blackerteam,更多详见www.rtc.help 美女视频直播一直都很火,很多公司烧钱进入,跟这个行业的朋友也做过很多交流,对其有一定了解,所以下面从用户.公司和技术三个角度谈谈我们对这个行业的理解. 第一个角度:用户 1.很多人觉得这些直播很无聊?不理解为什么这么多人喜欢看? 其实最开始我也是这种想法,但有一次一个客户让我去体验映客直播,突然在上面看到一个主…
原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnbl…
 针对DAVINCI DM6446平台,网络上也有很多网友写了V4L2的驱动,但只是解析Montavista linux-2.6.10 V4L2的原理.结构和函数,深度不够.本文决定把Montavista 的Linux-2.6.18 V4L2好好分析一下,顺便讲解在产品中的应用,满足一些客户提出要求,毕竟V4L2是LINUX一个很重要的视频驱动,适合很多嵌入式芯片平台.本文首先讲解DM6446 DAVINCI视频处理技术的硬件工作原理,然后讲解DM6446 V4L2采集驱动和输出驱动,然后对TI…
一.网络设备驱动的结构 网卡设备不同于字符设备和块设备, 网络设备并不对应于/dev目录下的文件,它存放在/sys/class/net目录下. Linux系统对网络设备驱动定义了四个层次: 1. 网络协议接口层:用于实现统一的数据包收发的协议,通过dev_queue_xmit()函数发送数据, 通过netif_rx()函数接收数据 2. 网络设备接口层:通过struct net_device来描述一个具体的网络设备的信息 3. 设备驱动功能层:同于驱动网络设备实现各个功能,通过hard_star…
摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析.修改用于标准格式的视频驱动,使其优化后适用于RAW采集格式,在此基础上开发了基于多级缓存管理机制的应用程序,最终达到采集速率至少每秒15帧的要求.    �关键词:视频驱动:DM642:CCD高清传感器:RAW采集格式:缓存管理机制  �中图分类号: TP311.11 文献标志码:A  �  Abstract: To s…
编写基于V4L2视频驱动主要涉及到以下几个知识点:1> 摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法.各种参数的配置方法.信号输出类型等.2> Camera解码器.控制器 如果摄像头是模拟量输出的,要熟悉解码器的配置.最后数字视频信号进入camera控制器后,还要熟悉camera控制器的操作.3> V4L2的API和数据结构 编写驱动前要熟悉应用程序访问V4L2的方法及设计到的数据结构.4> V4L2的驱动架构 最后编写出符合V4L2规范的视频驱动. 本文介绍基于S…
目录 驱动调试(三)oops确定函数PC 什么是oops 流程简述 代码仓库 模块例子分析 找到PC值 判断是否属于模块 查看符号表 找到模块 反汇编模块 内核例子分析 找到PC值 判断是否属于模块 反汇编内核 分析汇编 title: 驱动调试(三)oops确定函数PC date: 2019/1/14 17:30:32 toc: true --- 驱动调试(三)oops确定函数PC 什么是oops oops是 Linux 内核的一部分出现了偏差行为,你有做错了什么吗?可能没有.它实际上就是"哎呀…
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10307089.html ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg提供的解码器和SDL库进行视频播放.本文基于FFmpeg工程4.1版本进行分析,其中ffplay源码清单如下: https://github.com/FFmpeg/FFmpeg/blob/n4.1/fftools/ffplay.c 在尝试分析源码前,可先阅读如下参考文章作为铺垫: [1]. 雷霄骅,…
基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ 0. 导语 学习进入到了下一个阶段,还是以AD9833为例,这次学习是向设备申请中断,实现触发,在未来很多场景,比如做用户级的SPI传输完毕数据之后,怎么知道从设备要发数据呢,则需要一个IO信号通知主设备来读从设备的数据,那么就需要一个外部的IO中断信号,所以呢,对于中断的处理十分重要,本demo实现这样的一个功能增加一个GPIO口,这个GPIO口接的是一个按键,通过触发信号,进入中断服务函数,在中断服务函数内改变A…
在<debian下使用dynamic printk分析usb转串口驱动执行流程>中使用了usb转串口,当前例子使用usb网卡分析驱动(dm9601芯片). 仍然需要使能dynamic printk,可以参考<debian下配置dynamic printk以及重新编译内核>配置并重新编译内核. 此处使用的usb网卡是从京东购买的沐阳 Jp1081. 未插入usb网卡时,查看usb信息: $ lsusb Bus Device : ID 1d6b: Linux Foundation 2.…
看了一篇文章<debug by printing>,文中提到了多种通过printk来调试驱动的方法,其中最有用的就是"Dynamic debugging". “Dynamic debugging"的官方文档:http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/dynamic-debug-howto.txt?id=HEAD "Dyanmic de…
转自:http://blog.chinaunix.net/uid-10747583-id-298573.html Tags:V4L2驱动框架.API.操作流程…… 原文地址:http://www.eefocus.com/ayayayaya/blog/10-09/196261_9360a.html 作者:刘洪涛,华清远见嵌入式学院讲师. 编写基于V4L2视频驱动主要涉及到以下几个知识点: ●    摄像头方面的知识                要了解选用的摄像头的特性,包括访问控制方法.各种参数…
项目需要用到win7 32位系统,于是装个虚拟机,换了好几个系统资源,都是没有网卡驱动, XP 2003 都能上网唯独WIN7 不行,安装vmware tools也不管用,终于找到了这个东西.vmware win7 虚拟网卡驱动…
win7虚拟打印驱动开发注意事项 通过控制面板安装遇到以下问题:错误1.提示“Printer driver was not installed. Operation could not be completed (error 0x00000002)”错误2.没有任何提示,就是安装不上 最后还是在stackoverflow找到了解决办法,原话在此: is your INF file correct?? do verify it using INFGate.exe and there should…
JDBC注册驱动的三种方式 1.通过导入的JDBC的驱动包拿到的com.mysql.jdbc.Driver对象,利用java.sql.DriverManager对象的DriverManager.registerDriver(driver)注册. 2.通过类反射拿到com.mysql.jdbc.Driver对象,利用java.sql.DriverManager对象的DriverManager.registerDriver(driver)注册. 3.拿到驱动反射类,自动注册 //第一种方式 Driv…
1.描述 网卡的驱动其实很简单,它还是与硬件相关,主要是负责收发网络的数据包,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送, 并将接收到的数据包传递给上层协议. 网卡设备与字符设备和块设备不同, 网络设备并不对应于/dev目录下的文件,不过会存放在/sys/class/net目录下 如下图所示,我们通过ls /sys/class/net/ 命令,可以看到有两个网卡: 2.Linux系统对网络设备驱动定义了4个层次, 这4个层次有到下分为: 1)网络协议接口层: 实现统一的数据包收…
JUC源码分析-线程池篇(三)ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor.它主要用来在给定的延迟之后运行任务,或者定期执行任务.ScheduledThreadPoolExecutor 的功能与 Timer 类似,但 Timer 对应的是单个后台线程,而 ScheduledThreadPoolExecutor 可以在构造函数中指定多个对应的后台线程数. JUC源码分析-线程池篇(三)T…
JUC源码分析-线程池篇(三)Timer Timer 是 java.util 包提供的一个定时任务调度器,在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. 1. Timer 类结构 Timer 由 TimerThread,TaskQueue ,TimerTask 组成. Timer 初始化时会构建一个 TimerThread 线程用于执行调度任务.TaskQueue 保存所有调度的定时任务,基于二叉树小顶堆时间,第一个要执行的任务永远位于 queue[1],其插…
目录 前言 示例代码 总结 前言 很多时候需要编写串口代码,但是又没有真实串口设备来调试代码.以及本身就是要操作2个串口的情况,可以使用"虚拟串口驱动"工具方便的调试代码. 使用方法就是点击添加端口,此时"COM1 <-> COM2"是一组,及对COM1写数据会让COM2读到,对COM2写数据会让COM1读到,是不是很方便. 下面是"虚拟串口驱动"工具的截图,我是在网上随便找的一个汉化版,大家可自行百度下载吧. 示例代码 串口收发都是…
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明 STC8H开发(四): FwLib_STC8 封装库的介绍和使用注意事项 STC8H开发(五): SPI驱动nRF24L01无线模块 STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块 ADXL345 A…
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明 STC8H开发(四): FwLib_STC8 封装库的介绍和使用注意事项 STC8H开发(五): SPI驱动nRF24L01无线模块 STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块 STC8H开发(七…
videobuf2-core.h中的vb2_buffer,记录了v4l2_buffer ,驱动可以对vb2_buffer的v4l2_buffer进行操控, vb2_buffer是v4l2框架层的代码,而v4l2_buffer也是用户空间的应用程序,可以读取的一个数据结构. 在reqbuf的时候把每个vb2_buffer会放入vb2_queue中,通过vb2_buffer的index在数组中保存 查看myuvc可以更好的理解队列,有两个队列,qbuf后通过,启动摄像头,select在videobu…