一、摄像头驱动 V4L2框架分析
摄像头驱动是属于字符设备驱动程序
V4L2: vidio for linux version 2,我们分析的是linux3.4.2内核。
回顾二期,怎么写驱动?
1.构造一个file_operations:.open=drv_open .read=drv_read
2.告诉内核:register_chrdev(主设备号,名字,&file_operations)
3.入口函数:调用register_chrdev
4.出口函数:卸载
一般采用register_chrdev的代替方法:分配、设置cdev,cdev_add
而对于复杂的驱动,采用分层的概念。
例如LCD驱动中分为两层:上层通用的核心层内核已经帮我们做好,即在fbmem.c
1.构造file_operations(open read write 。。)
2.注册
3.入口、出口
我们做的是硬件相关层,供上层file_operations调用
1.分配一个fb_info 结构体
2.设置
3.注册
4.硬件相关的操作
因此,对于这种复杂的驱动,我们的做法:
1.分配某个结构体
2.设置
3.注册
4.硬件相关
现在分析V4L2框架:
把usb设备接到系统前台,会有打印信息,根据打印信息在内核里找出驱动,用dmsg命令查看;
grep "Found UVC" * -nR 搜索 在uvc_driver.c里,这是个硬件相关的驱动。
分析代码,猜测V4L2 框架 肯定也是分为至少两层 。
app 调用 open read write -->调用 v4l2_fops 里的 open read write->调用硬件相关层的video_device 里提供的函数
----------------------------------------------------------------------------------------------------------