Windows摄像头驱动研究(⼀)
摄像头驱动的主要⽬的是通过通过硬件捕捉视频信号。
WDM摄像头驱动框架。
主要包括两种的驱动ClassDriver(由Windows提供,为了统⼀标准), MiniDriver(由程序员实现)
Class Driver:
与操作系统交互,包括处理同步,提够标准接⼝。
Mini Driver:
主要由类驱动调⽤,负责具体的硬件相关的操作。
通过⼀个图看看他们的关系:
其中SRB是 Stream Request Block。
初始化:
电视剧晚婚1. 即插即⽤的设备,插⼊后调⽤Mini Driver的 DriverEntry例程;
2 Mini Driver 在⾃⼰的DriverEntry中填充HW_INITIALIZATION_DATA,然后返回StreamClassRegisterMinidriver;聿怎么读音
3. Class Driver 中初始化⼀个SRB_INITIALIZE_DEVICE类型的SRB,这个SRB中的CommandData.ConfigInfo记录着摄像头硬件的相关信息;
这个SRB会传递给⼩驱动,⼩驱动会由此得到⼀些硬件的信息并返回;同时告知类驱动,⼩驱动已经初始化完毕。
4. 然后类驱动再向⼩驱动发送⼀个SRB:SRB_GET_STREAM_INFO, 由此获得:HW_STREAM_HEADER 数据信息和 HW_STREAM_INFORMATION等信息这些信息中包括了摄像头驱动中提供的视频图像的⼤⼩,图像的格式等信息;
5. 然后类驱动再发送⼀个 HW_STREAM_INFORMATION的SRB,这次请求以后,⼩驱动应该做完所有的初始化操作,并返回给驱动程序。
·每个Minidriver都必须提供的例程:
:获取 HW_SRB数据包的回调函数;
:对HW_SRB数据包进⾏超时处理的回调函数;
:使⼩驱动⽀持某⼀事件;
:当驱动遇到中断时调⽤的回调函数;
·Minidriver为每个单独的流提供的例程:
:对于获取数据流的回调函数
金牛座历史名人网上交水费:对于控制数据流的回调函数
:使数据流⽀持⼀种事件日语就业前景
:对于数字流时钟控制的回调函数。
我们再来看⼀下驱动程序的⼯作流:
1. 设备插⼊,被即插即⽤设备管理器检测到;
2. 于是创建PDO,产⽣相应的IRP;
3. 于是I/O⼦系统加载MiniDriver,并进⼊到DriverEntry;
4. 在DriverEntry⾥⾯初始化:HW_INITIALIZATION_DATA 数据结构(其中包括控制SRB的HwReceivePacket);
5.类驱动程序构造SRB,并将其Command设置为SRB_INITIALIZATION_DEVICE;
6,. 将此SRB作为参数,调⽤HwReceivePacket;
7,如此类似构造:open close等等的SRB,调⽤HwReceivePacket。
关于戏曲本节完。
参考书⽬:
《 Windows 驱动开发技术详解》
发布评论