转自:http://blog.csdn.net/jeffade/article/details/7698404 几个重要的结构 struct--接口 struct usb_interface { /* array of alternate settings for this interface, * stored in no particular order */ struct usb_host_interface *altsetting; struct usb_host_interface *…
学习目标:分析USB驱动源码结构. 一.Windows下USB驱动理论问题 1. 当usb设备接入PC时,右下角弹出"发现AAA",并弹出对话框,提示安装驱动程序.没有驱动程序,Windows是怎样知道是AAA设备? --> Windows有USB的总线驱动程序,接入USB设备后,"总线驱动程序"就会知道该设备是"AAA",提示安装的是”AAA的设备驱动程序".这里USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱…
所有 USB 驱动必须创建的主要结构是 struct usb_driver. 这个结构必须被 USB 驱动填 充并且包含多个函数回调和变量, 来向 USB 核心代码描述 USB 驱动: struct module *owner 指向这个驱动的模块拥有者的指针. USB 核心使用它正确地引用计数这个 USB 驱 动, 以便它不被在不合适的时刻卸载. 这个变量应当设置到 THIS_MODULE 宏. const char *name 指向驱动名子的指针. 它必须在内核 USB 驱动中是唯一的并且通常…
从第一节我们已经知道,usb_generic_driver在自己的生命线里,以一己之力将设备的各个接口送给了linux的设备模型,让usb总线的match函数,也就是usb_device_match,在自己的那条驱动链表里为它们寻找一个合适的接口驱动程序.那么这些接口驱动都从哪里来? 这就要说到每个玩儿linux的人都会知道的那几个著名的命令insmod,modprobe,rmmod.你insmod或modprobe驱动的时候,经过一个曲折的过程,会调用到你驱动里的那个xxx_init函数,进而…
本文转载自:http://www.360doc.com/content/12/0321/14/8363527_196286673.shtml 注意,该文件是2.4的内核的驱动源文件,并不保证在2.6内核中可用.文件路径为kernel/driver/usb/usb_skelton.c 该文件是usb驱动的一个框架,很多usb的驱动都可以在这个文件的基础上进行修改得到. 下面就是该源文件,中文部分是我的注释,如有错误的地方,欢迎指出. /* * USB Skeleton driver - 0.6 *…
本文转载自:http://www.360doc.com/content/12/0504/19/8363527_208666082.shtml 编写USB驱动程序步骤:1所有usb驱动都必须创建主要结构体struct usb_driverstruct usb_driver->struct module *owner   (有他可正确对该驱动程序引用计数,应为THIS_MODULE)->const char *name   (驱动名字,运行时可在查看 /sys/bus/usb/drivers/)-…
总算是进入了HCD的片儿区,既然来到一个片区,怎么都要去拜会一下山头几个大哥吧.,先回忆一些我们怎么到这里的?给你列举一个调用函数过程usb_control_msg->usb_internal_control_msg->usb_start_wait_urb->usb_submit_urb->usb_hcd_submit_urb.这个山头儿,王中之王就是drivers/usb/core/hcd.h里定义的struct usb_hcd. /*----------------------…
直接看代码吧. /*-------------------------------------------------------------------*/ /** * usb_submit_urb - issue an asynchronous transfer request for an endpoint * @urb: pointer to the urb describing the request * @mem_flags: the type of memory to alloca…
函数usb_control_msg完成一些初始化后调用了usb_internal_control_msg之后就free urb.剩下的活,全部留给usb_internal_control_msg去做了,那就去了解一下它背后的生活吧. /*-------------------------------------------------------------------*/ // returns status (negative) or length (positive) static int…
在第五节我们说过会专门分析函数usb_device_match,以体现模型的重要性.同时,我们还是要守信用的. 再贴一遍代码,看代码就要不厌其烦. static int usb_device_match(struct device *dev, struct device_driver *drv) { /* devices and interfaces are handled separately */ if (is_usb_device(dev)) { /* interface drivers…