linux驱动学习(九) usb设备驱动的初步认知
小小的概述
和i2c驱动类似,usb驱动架构中也有usb-core这样的框架,为上层设备驱动程序提供封装后的方便使用的api函数,为底层与硬件相关的代码封装提供总线接入功能。
撇开复杂的usb协议,我们先认知linux驱动中的usb框架,至于细节的实现,需要漫长的代码。在我们还不知道它长什么样的时候就去讨论内部的实现机制就毫无意义的。
usb驱动架构图1
准确的说,图1是不完整的usb驱动架构,但是有助于对架构的理解。不光是i2c,linux均是以这样的架构呈现。
对于我们初学者来说,先接触一下usb协议的基本概念,然后在分析一个代表性的usb设备驱动,这样是一个有效的学习usb驱动的途径。
之后,在深入usb协议再分析usb-core。
usb-skeletonlinux内核源码中的/drivers/usb/usb-skeleton.c 文件为我们提供了一个最基础的usb驱动程序,即usb骨架程序,可以看做这是一个最简单的usb设备驱动实例,尽管具体的usb设备驱动千差万别,但其骨架则万变不离其宗。
我们的usb驱动开发也从他开始。
linux USB驱动程序需要做的第一件事件就是在linux usb子系统里注册,这个子系统就是usb-core,同事提供一些相关信息,例如这个驱动程序支持哪种设备,当被支持的设备从系统插入或者拔出时,会有哪些动作,所有这些信息都传送到usb子系统中,在usb-skeleton.c 中是这样表示的。
图2