Linux那些事儿 之 戏说USB(15)繁华落尽
2018-03-02 08:44
330 查看
转载地址:http://blog.csdn.net/fudan_abc/article/details/1799204
台湾作家林清玄在接受记者采访时,如此评价自己的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
13213
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接口走,各走各的路,分开了,就不再相见。
台湾作家林清玄在接受记者采访时,如此评价自己的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
13213
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那些事儿 之 戏说USB(15)繁华落尽
- 【转】Linux那些事儿 之 戏说USB(15)繁华落尽
- Linux那些事儿 之 戏说USB(15)繁华落尽
- Linux那些事儿 之 戏说USB(15)繁华落尽
- Linux那些事儿 之 戏说USB(11)繁华落尽
- Linux那些事儿 之 戏说USB(15)设备
- Linux那些事儿 之 戏说USB(4)漫漫辛酸路
- Linux那些事儿 之 戏说USB(13)面纱
- Linux那些事儿 之 戏说USB(24)设备的生命线(三)
- Linux那些事儿 之 戏说USB(32)设备的生命线(十一)
- Linux那些事儿 之 戏说USB(30)设备的生命线(九)
- Linux那些事儿 之 戏说USB(34)驱动的生命线(二)
- 【转】Linux那些事儿 之 戏说USB(9)我是谁
- Linux那些事儿 之 戏说USB(13)接口是设备的接口(二)
- 【转】Linux那些事儿 之 戏说USB(23)设备的生命线(二)
- Linux那些事儿 之 戏说USB(14)端点
- 【转】Linux那些事儿 之 戏说USB(38)接口的驱动
- Linux那些事儿 之 戏说USB(26)设备的生命线(九)
- Linux那些事儿 之 戏说USB(10)好戏开始了
- Linux那些事儿 之 戏说USB(25)设备的生命线(四)