1.如何写驱动程序:
1.构造file_operations结构体
实现其中的open,read,write成员。
2.告诉内核:register_chrdev(主设备号,&file_operations,name);
3.入口函数,出口函数。
2.对于复杂的字符设备驱动程序,使用分层概念。
如对于LCD设备驱动程序分为两层:fbmem.c和硬件相关层两层。
fbmem.c中:完成分配,设置,注册file_operations结构体。
硬件相关层中:分配、设置、注册fb_info结构体,以及一些硬件相关的操作。
当应用程序调用open等函数时,会调用fbmem.c中的file_operations中的open成员,里面又调用硬件相关中的fb_info结构体中用于操作硬件的函数。
3.怎么写分层驱动:分配某结构体,设置,注册,硬件相关操作。
4.V4L2框架也是基于这种分层模型:有核心层和硬件相关层。
dmesg查看内核打印信息。
在硬件相关层uvc_driver.c中的video_register_device函数,分配设置注册了一个video_device结构体。
反推得知核心层为v4l2_dev.c:
cdev_alloc();
cdev->ops=v4l2_fops;//file_operations结构体,供应用层调用。
cdev_add();
5.虚拟视频驱动分析:vivi.c
1.分配video_device
2.设置
3.注册:video_device
vivi_init
vivi_create_instance
v4l
1.构造file_operations结构体
实现其中的open,read,write成员。
2.告诉内核:register_chrdev(主设备号,&file_operations,name);
3.入口函数,出口函数。
2.对于复杂的字符设备驱动程序,使用分层概念。
如对于LCD设备驱动程序分为两层:fbmem.c和硬件相关层两层。
fbmem.c中:完成分配,设置,注册file_operations结构体。
硬件相关层中:分配、设置、注册fb_info结构体,以及一些硬件相关的操作。
当应用程序调用open等函数时,会调用fbmem.c中的file_operations中的open成员,里面又调用硬件相关中的fb_info结构体中用于操作硬件的函数。
3.怎么写分层驱动:分配某结构体,设置,注册,硬件相关操作。
4.V4L2框架也是基于这种分层模型:有核心层和硬件相关层。
dmesg查看内核打印信息。
在硬件相关层uvc_driver.c中的video_register_device函数,分配设置注册了一个video_device结构体。
反推得知核心层为v4l2_dev.c:
cdev_alloc();
cdev->ops=v4l2_fops;//file_operations结构体,供应用层调用。
cdev_add();
5.虚拟视频驱动分析:vivi.c
1.分配video_device
2.设置
3.注册:video_device
vivi_init
vivi_create_instance
v4l