全球旧事资料 分类
调用相应函数,并将该结构作为参数传递给它们。这样,就完成了驱动和核心之间的通信。例如:staticstructvideodevicevdev_template;//声明videodevice,指出挂接驱动StaticStructfile_operatio
sspca5xx_fops;//声明本驱动的文件操作函数指针Structvideodevice幸vdevvideo_devdatafile;//从文件指针中提取出videodevice结构
7
f在videodevice结构中,有一个私有指针priv,可以将它指向一块保留内存。在这块内存中,保存着本驱动、本设备的相关初始化信息。这块内存的申请、初始化、指针指向等工作都是在USB驱动的枚举函数probe中完成。这样,在枚举函数将控制权返还给系统后,因为内核不销毁保留内存,所以驱动仍然保留着自己的信息。在驱动卸载函数中需要将申请的各块内存全部释放。
4视频采集设计与实现
41初始化及设置使用ioctlcamerafd,VIDIOCGMBUF,camerambO函数初始videombuf,获得摄像头存储缓冲区的帧信息,之后修改videommap和帧状态的设置,例如重新设置图像帧的垂直及水平分辨率、彩色显示格式。可利用如下语句:MapbutheightCOL;//COLS为程序中定义的常量;mapbufwidthROWS;//ROWS为程序中定义的常量;mapbufformatVIDEO_PALATTE_RGB24;42实现摄像头设备文件到内存区的映射调用bufvoidmmapvoidaddrsizetle
,i
tprot,i
tflags,i
tfd,offtoffset。以下是个函数各参数的注释。le
:映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起:prot:指定共享内存的访问权限PROT_READ可读,PROT_WRITE
J写,PROTEXEC可执行;flags:MAP_SHAREDMAPPRIVATE中必选一个,MAPFIXED不推荐使用;addr:共享内存的起始地址,一般设0,表示由系统分配:mmapO:返回值是系统实际分配的起始地址;下面是该函数的程序实现:i
tcamerammap_i
itcamera_devicevdifcamerambufvd0retur
1;ifvd一mapmmapO,vd一mbuf.size,PROT_READIPROTWRITE,MAPSHARED,vdfd,00
8
fperror
好听全球资料 返回顶部