USB 总线引出两个重要的链表! 一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(u sb dev ice driv er)和 USB 驱动程序(u sb driv er)。 USB 设备驱动程序(u sb dev ice driv er)和 USB 驱动程序(u sb driv er)的区别是什么? USB 设备驱动程序包含 USB 设备的一些通用特性,将与所有 USB 设备相匹配。在 USB core 定义了:stru ct u sb_dev ice_driv er u sb_generic_driv er 。u sb_generic_driv er 是 USB 子系统中唯一的一个设备驱动程序对象。而 USB 驱动程序则是与接口相匹配,接口是一个完成特定功能的端点的集合。 设备是如何添加到设备链表上去的? 在设备插入 USB 控制器之后,USB core 即会将设备在系统中注册,添加到 USB 设备链表上去。 USB 设备驱动程序(u sb dev ice driv er)是如何添加到驱动链表上去的? 在系统启动注册 USB core 时,USB 设备驱动程序即将被注册,也就添加到驱动链表上去了。 接口是如何添加到设备链表上去的? 在 USB 设备驱动程序和 USB 设备的匹配之后,USB core 会对设备进行配置,分析设备的结构之后会将设备所有接口都添加到设备链表上去。比如鼠标设备中有一个接口,USB core 对鼠标设备配置后,会将这个接口添加到设备链表上去。 USB 驱动程序(u sb driv er)是如何添加到驱动链表上去的? 在每个 USB 驱动程序的被注册时,USB 驱动程序即会添加到驱动链表上去。比如鼠标驱动程序,u sb_mou se_init 函数将通过 u sb_register(&u sb_mou se_driv er) 将鼠标驱动程序注册到 USB core 中,然后就添加到驱动链表中去了。其中 u sb_mou se_driv er 是描述鼠标驱动程序的结构体。 已配置状态(configu red statu s)之后话 当鼠标的设备、接口都添加到设备链表,并且鼠标驱动程序也添加到驱动链表上去了,系统就进入一种叫做已配置(configu red)的状态。要达到已配置状态,将经历复杂的过程,USB core 为 USB 设备奉献着无怨无悔。在这个过程中,系统将会建立起该设备的的设备、配置、接口、设置、端点的描述信息,它们分别被 u sb_dev ice 、 u sb_configu ration 、 u sb_interface 、 u sb_host_interface 、u sb_ho...