Linux那些事儿 之 戏说USB(15)繁华落尽

原创 2007年09月24日 23:45:00
台湾作家林清玄在接受记者采访时,如此评价自己的30多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色;第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰;进入第三个十年,繁华落尽见真醇,我进入了‘醇光初现’的阶段,真正体味到了境界之美。”
很久很久以前,在自己还比较喜欢散文的时候,林清玄是我仅次于余秋雨的第二偶像。长夜有穷,真水无香。看过了Linux设备模型固的繁华似锦,该是体味境界之美的时候了。
Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init函数的874行注册,在drivers/usb/core/driver.c文件里定义
1523 struct bus_type usb_bus_type = {
1524         .name =         "usb",
1525         .match =        usb_device_match,
1526         .uevent =       usb_uevent,
1527         .suspend =      usb_suspend,
1528         .resume =       usb_resume,
1529 };
看来是要向这个分叉走了,既然没有回头的路,就放平心情,欣赏沿路美景吧。name自然就是usb总线的绰号了,与芙蓉姐姐一般无二,人在江湖,身不由己。match这个函数指针就比较有意思了,它充当了一个红娘的角色,在总线的设备和驱动之间牵线搭桥,类似于交大BBS上的鹊桥版,虽然它们上面的条件都琳琅满目的,但明显这里match的条件不是那么的苛刻,要实际些。match指向了函数usb_device_match
540 static int usb_device_match(struct device *dev, struct device_driver *drv)
541 {
542         /* devices and interfaces are handled separately */
543         if (is_usb_device(dev)) {
544
545                 /* interface drivers never match devices */
546                 if (!is_usb_device_driver(drv))
547                         return 0;
548
549                 /* TODO: Add real matching code */
550                 return 1;
551
552         } else {
553                 struct usb_interface *intf;
554                 struct usb_driver *usb_drv;
555                 const struct usb_device_id *id;
556
557                 /* device drivers never match interfaces */
558                 if (is_usb_device_driver(drv))
559                         return 0;
560
561                 intf = to_usb_interface(dev);
562                 usb_drv = to_usb_driver(drv);
563
564                 id = usb_match_id(intf, usb_drv->id_table);
565                 if (id)
566                         return 1;
567
568                 id = usb_match_dynamic_id(intf, usb_drv);
569                 if (id)
570                         return 1;
571         }
572
573         return 0;
574 }
540行,经历了linux设备模型的繁华,参数我们都已经很熟悉了,对应的就是总线两条链表里的设备和驱动,也可以说是鹊桥版上的挂牌的和摘牌的。总线上有新设备或新的驱动添加时,这个函数总是会被调用,如果指定的驱动能够处理指定的设备,也就是匹配成功,函数返回0。梦想是美好的,现实是残酷的,匹配是未必成功的,红娘再努力,双方对不上眼也是实在没办法的事。
543行,一遇到if和else,我们就知道又处在两难境地了,代码里我们可选择的太多,生活里我们可选择的太少,出生,长大,死亡,好像一直身不由己的随着命运在走。这里的岔路口只有两条路,一条给USB设备走,一条给USB接口走,各走各的路,分开了,就不再相见。
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux那些事儿 之 我是PCI(5)初始化(二)

.initcall2.init子节中的两个函数已经见识过了,该轮到.initcall3.init子节里的了,就是上边儿表中的acpi_pci_init和pci_access_init,这两个又是谁先谁...
  • mrwangwang
  • mrwangwang
  • 2014年06月12日 18:51
  • 2345

细说网络那些事儿之网络基本功(一):细说网络传输

文章转自:https://community.emc.com/thread/197851
  • n289950578
  • n289950578
  • 2014年08月11日 14:25
  • 3453

Linux那些事儿 之 我是PCI(4)初始化(一)

解析完了PCI的那些内核参数,再翻过多少座山跨过多少条河,内核就会遇到init/main.c里一个名叫do_initcalls的函数。do_initcalls对内核来说只不过是漫长冒险旅程中的一个驿站...
  • mrwangwang
  • mrwangwang
  • 2014年06月12日 17:31
  • 1188

【转】Linux那些事儿 之 戏说USB(15)繁华落尽

台湾作家林清玄在接受记者采访时,如此评价自己的30多年写作生涯:“第一个十年我才华横 溢,‘贼光闪现’,令周边黯然失色;第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰;进入第三...
  • atgczj
  • atgczj
  • 2012年05月04日 15:52
  • 165

Linux那些事儿 之 戏说USB(15)繁华落尽

台湾作家林清玄在接受记者采访时,如此评价自己的30多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色;第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰;进入第三个...
  • zhouzhuan2008
  • zhouzhuan2008
  • 2012年11月27日 14:40
  • 366

Linux那些事儿 之 戏说USB(11)繁华落尽

Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init函数注册,在drivers/usb/core/driver.c文件里定义 struct bus_typ...
  • zhqh100
  • zhqh100
  • 2015年03月24日 16:26
  • 447

Linux那些事儿 之 戏说USB(15)设备

struct usb_device结构冗长而又杂乱 include/linux/usb.h struct usb_device { int devnum; char devpath[16];...
  • zhqh100
  • zhqh100
  • 2015年03月25日 09:31
  • 978

《Linux那些事儿之我是USB》我是U盘(15)冬天来了,春天还会远吗?(一)

在整个usb-storage模块的代码中,其最灵魂的部分在一个叫做usb_stor_control_thread()的函数中,而那也自然是我们整个故事的高潮。这个函数的调用有一些特殊,是从usb_st...
  • fudan_abc
  • fudan_abc
  • 2011年09月25日 22:03
  • 6581

Linux那些事儿 之 戏说USB(29)驱动的生命线(一)

现在开始就沿着usb_generic_driver的成名之路走一走,设备的生命线你可以想当然的认为是从你的usb设备连接到hub的某个端口时开始,驱动的生命线就必须得回溯到usb子系统的初始化函数us...
  • zhqh100
  • zhqh100
  • 2015年03月26日 19:42
  • 616

Linux那些事儿 之 戏说USB(28)设备的生命线(十一)

现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符、接口描述符还是端点描述符都不分男女不分彼此的挤在一...
  • zhqh100
  • zhqh100
  • 2015年03月26日 17:04
  • 906
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux那些事儿 之 戏说USB(15)繁华落尽
举报原因:
原因补充:

(最多只允许输入30个字)