科创园

科创园地,分享技术知识,为科技助力发展,贡献一己之力。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2014年3月30日

摘要: 暂时先告别媒人,我们去分析各自的生命旅程,最后还会回到usb_device_match函数。首先当你将usb设备连接在hub的某个端口上,hub检测到有设备连接了进来,它会为设备分配一个struct usb_device结构的对象并初始化,并调用设备模型提供的接口将设备添加到usb总线的设备列表里,然后usb总线会遍历驱动列表里的每个驱动,调用自己的match函数看它们和你的设备或接口是否匹配。hub检测到自己的某个端口有设备连接了进来后,它会调用core里的usb_alloc_dev函数为struct usb_device结构的对象申请内存,这个函数在drivers/usb/core/usb 阅读全文

posted @ 2014-03-30 23:10 科创园 阅读(2320) 评论(0) 推荐(0) 编辑

摘要: 在第五节我们说过会专门分析函数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 never match devices */ if (!is_usb_device_driver(dr.. 阅读全文

posted @ 2014-03-30 22:41 科创园 阅读(6800) 评论(0) 推荐(0) 编辑

摘要: 前面分析了usb的四大描述符之端点描述符,接口描述符(每一个接口对应一个功能,与之配备相应驱动),配置描述符,最后分析设备如何包括这些描述符。首先记住,在usb的世界里,设备大于配置,配置大于接口,接口包含多个设置,接口也可以理解为功能,所有端点的集合构成一个功能。废话少说,看一下usb设备结构体定义吧!struct usb_tt;/** * struct usb_device - kernel's representation of a USB device * @devnum: device number; address on a USB bus * @devpath: devi 阅读全文

posted @ 2014-03-30 22:39 科创园 阅读(4293) 评论(0) 推荐(0) 编辑

摘要: 前面分析了usb的四大描述符之端点描述符,接口描述符(每一个接口对应一个功能,与之配备相应驱动),下面是看配置描述符还是看设备描述符呢??我们知道,设备大于配置,配置大于接口,接口可以有多种设置。我们还是按照从小到大的顺序,继续看配置结构体吧!struct usb_host_config {struct usb_config_descriptor desc;char *string; /* iConfiguration string, if present *//* the interfaces associated with this configuration,* stored in no 阅读全文

posted @ 2014-03-30 22:37 科创园 阅读(4390) 评论(0) 推荐(0) 编辑

摘要: 前面struct usb_interface里表示接口设置的struct usb_host_interface被有意的飘过了,咱们在这节主要讲讲这个结构体,同样在include/linux/usb.h文件里定义。/* host-side wrapper for one interface setting's parsed descriptors */struct usb_host_interface {struct usb_interface_descriptor desc;/* array of desc.bNumEndpoint endpoints associated with 阅读全文

posted @ 2014-03-30 22:36 科创园 阅读(3425) 评论(0) 推荐(0) 编辑

摘要: 学到这里不容易,先说一段故事吧。二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电)。兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家。两人抖擞精神,开始爬楼。爬到20楼的时候,开始觉得背包很重了。两人商量,决定把背包存在20楼,到时候再回过头来取。卸下了背包,两个人觉得很轻松,说说笑笑地继续往上爬。爬到40楼的时候,两人已经很累了,就开始互相抱怨指责。哥哥说:你为什么不看通知啊?弟弟说:我忘了看通知这件事,你怎么不提醒我昵?两个人就这样吵吵闹闹,一路吵到60层。到了这时候,两人实在疲惫不堪,终于懒得吵了,觉得还是应该安安静静地继续爬楼。当他们终于爬完了最后20层,来 阅读全文

posted @ 2014-03-30 22:35 科创园 阅读(4971) 评论(0) 推荐(0) 编辑

摘要: Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init的函数bus_register(&usb_bus_type)里注册。usb_bus_type定义如下:struct bus_type usb_bus_type = {.name = "usb",.match = usb_device_match,.uevent = usb_uevent,.suspend = usb_suspend,.resume = usb_resume,};显然,在这个结构体里重要的是usb_device_match函数,以后会专门一节来详细分析sta 阅读全文

posted @ 2014-03-30 22:34 科创园 阅读(3890) 评论(0) 推荐(0) 编辑

摘要: 在上文说usb_init函数,却给我们留下了很多岔路口。这次就来好好聊聊关于总线设备驱动模型。这节只讲理论,不讲其中的函数方法,关于函数方法使用参考其他资料。总线、设备、驱动对应内核结构体分别为bus_type、device、device_driver。我们会发现,struct bus_type 结构中有成员struct kset drivers 和struct kset devices,同时struct device结构中有两个成员struct bus_type和structdevice_driver,struct device_driver结构中有两个成员struct bus_type和s 阅读全文

posted @ 2014-03-30 22:32 科创园 阅读(2391) 评论(0) 推荐(0) 编辑

摘要: 上节中看到usb目录中有一个core目录,凡是认识这个core单词的人都会想要先看看它是什么,对不?用LDD3中一幅图,来表述usb core所处地位。usb core负责实现一些核心的功能,为别的设备驱动程序提供服务,提供一个用于访问和控制USB硬件的接口,而不用去考虑系统当前存在哪种host controller。上述就是core的作用和地位,下面就分析core目录下的代码。首先用ls命令看一下它包含哪些文件,顺便用wc –l命令统计一下多少文件和代码。是不是吓了一跳?几万行的代码,core不愧是core,为大家默默的做这么多事。当然不用紧张,我们还是拿着地图(还记得地图是什么?)去慢慢探 阅读全文

posted @ 2014-03-30 22:31 科创园 阅读(4757) 评论(0) 推荐(0) 编辑

摘要: USB只是Linux庞大家族里的一个小部落,host controller是它们的族长,族里的每个USB设备都需要被系统识别。下图显示包含一个USB接口的USB鼠标导出的结果。USB系统中的第一个USB设备是root hub,它是和host controller绑定在一起的。这个root hub通常包含在PCI设备中,是连接PCI总线和USB总线的bridge,控制着连接到其上的整个USB总线。所有的root hub,内核的usb core都分配有独特的编号,上面贴出来的例子里,就是usb2,因为它注册在第二个hub。USB总线上的每个设备都以root hub的编号作为其名字的第一个号码。这个 阅读全文

posted @ 2014-03-30 22:29 科创园 阅读(2854) 评论(0) 推荐(0) 编辑

摘要: 此系列是http://blog.csdn.net/fudan_abc/博文的整理,同时加入了自己的理解。很敬佩fudan_abc的文章,仔细学习和分析受益很多。注:fundan_abc所分析linux内核代码所用的版本是2.6.22.6。Q:学习linux下的usb通信要怎样进行?熟悉linux驱动开发,同时需要了解usb协议规范,对照linux下的usb驱动代码慢慢分析和学习Q:为什么要开发usb?在usb出现以前,设备接口多样化(有串口、并口等),而usb可以实现这些接口的统一和标准化,USB是为了解决速度、扩展能力、易用性应景而生的Q:usb规范的发展经历了哪些?Usb的发展经历了1.0 阅读全文

posted @ 2014-03-30 22:07 科创园 阅读(5534) 评论(0) 推荐(0) 编辑