php网站开发就业,网站建设应遵守的原则,网页源代码搜索,网站后台管理系统的主要功能一、V4L2驱动框架
v4l2驱动框架主要对象#xff1a; #xff08;1#xff09;video_device#xff1a;一个字符设备#xff0c;为用户空间提供设备节点(/dev/videox)#xff0c;提供系统调用的相关操作(open、ioctl…) #xff08;2#xff09;v4l2_device#xff1a…一、V4L2驱动框架
v4l2驱动框架主要对象 1video_device一个字符设备为用户空间提供设备节点(/dev/videox)提供系统调用的相关操作(open、ioctl…) 2v4l2_device嵌入到video_device中表示一个v4l2设备 3v4l2_subdev表示一个v4l2设备的子设备一个v4l2_devide下可以有多个sub_device 4videobufv4l2驱动的缓存管理 1、核心层负责注册字符设备然后提供video_device对象和相应的注册接口给硬件相关层使用 2、硬件相关层需要分配一个video_device并设置它然后向核心层注册核心层会为其注册字符设备并且创建设备节点(/dev/videox)。同时硬件相关层还需要分配和设置相应的v4l2_device和v4l2_subdev其中v4l2_device的一个比较重要的意义就是管理v4l2_subdev当然有一些驱动并不需要实现v4l2_subdev此时v4l2_device的意义就不是很大了 3、当应用层通过/dev/video来操作设备的时候首先会来到V4L2的核心层核心层通过注册进video_device的回调函数调用相应的操作函数video_device可以直接操作硬件或者是通过v4l2_subdev来操作硬件 三、I2C驱动框架
先了解一下IIC通信协议
开始信号SSCL为高电平时SDA山高电平向低电平跳变开始传送数据。 结束信号PSCL为高电平时SDA由低电平向高电平跳变结束传送数据。 响应信号(ACK)接收器在接收到8位数据后在第9个时钟周期拉低SDA SDA上传输的数据必须在SCL为高电平期间保持稳定SDA上的数据只能在SCL为低电平期间变化 在IIC驱动中有几个比较重要的对象
1、i2c_adatper描述一个实际的 IIC 物理硬件I2C驱动和I2C设备我们需要通过I2C驱动去和I2C设备通讯这其中就需要一个I2C设配器I2C设配器对应的就是SOC上的I2C控制器 2、i2c_algorithmalgorithm是算法的意思对应的就是如何发送I2C时序 3、i2c_client描述一个挂接到 IIC 总线上的具体物理设备 4、i2c_driver用于描述一个 IIC 设备的驱动 i2c_adapter里面有两个重要的成员nr表示第几个i2c总线i2c controlleri2c_algorithm用来收发I2C数据里面有master_xfer函数 三、input子系统框架 输入子系统由Input driver驱动层、Input core输入子系统核心、Event handler事件处理层三部分组成。一个输入事件如鼠标移动、键盘按下等通过Input driver - Input core - Event handler - userspace的顺序到达用户空间的应用程序。 Input driver 主要实现对硬件设备的读写访问中断设置并把硬件产生的事件转换为核心层定义的规范提交给事件处理层。 Input core 承上启下。为设备驱动层提供了规范和接口通知事件处理层对事件进行处理 Event handler 提供用户编程的接口设备节点并处理驱动层提交的数据处理。 input.c为这个子系统的核心提供了两个重要的链表 1、input_handler_list 是这个input子系统的所有handler的链表 2、 input_dev_list 是这个子系统的所有device的链表 重要的结构体 1、内核用input_dev结构体表示一个输入设备(鼠标键盘触摸屏). 2、输入设备需要向内核上报一个事件内核中用input_event表示一个事件 3、其中type表示哪类事件比如EV_REL表示相对位移(比如鼠标)EV_ABS表示绝对位置(比如触摸屏) 四、USB驱动框架 USB 是一种分层总线结构。USB 设备与主机之间的数据传输由 USB 控制器控制。Linux USB 驱动程序架构如下图所示。Linux USB 主机驱动包括三部分USB 主机控制器驱动、USB 核心和 USB 设备驱动。 目前的USB驱动都很成熟很多时候只需要添加VID,PID等信息即可使用。
1、USB Core 1USB Core这个模块是纯软件部分并不代表一个设备是独立于硬件的协议栈它是所有USB设备赖以生存的模块即USB子系统的核心。代码位于kernel/drivers/usb/core目录下。 2USB的初始化函数在kernel/drivers/usb/core/usb.c中定义主要完成bus_registerUSB总线注册、usb_major_init注册usb主控器字符设备、usb_register注册usbfs驱动、usb_hub_initUSB Hub初始化注册hub驱动、创建内核守护线程来监测hub端口的状态变化等工作 2、USB HCDHost Controller Driver 硬件主机控制器Host Controller之上运行的是HCD是对主机控制器硬件的一个抽象实现核心层与控制器之间的对话接口USB HCD包含多种USB接口规范 1UHCIIntel提供通用主机控制接口USB1.0/1.1 2OHCI微软提供开放主机控制接口USB1.0/1.1 3EHCI增强主机控制接口USB2.0 3、USB Device Driver 在Linux内核中使用 struct usb_driver结构体来描述一个USB驱动通过usb_register在USB驱动中注册进内核。
因此USB设备驱动开发主要包含如下两个部分 分配/设置usb_driver结构体实现并填充结构体内容注册usb_driver