首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
嵌入式技术
» Linux那些事儿 之 戏说USB(15)繁华落尽
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Linux那些事儿 之 戏说USB(15)繁华落尽
发短消息
加为好友
bingchentiao
当前离线
UID
852665
帖子
6999
精华
0
积分
3500
阅读权限
90
在线时间
215 小时
注册时间
2011-8-30
最后登录
2014-1-19
论坛元老
UID
852665
1
#
打印
字体大小:
t
T
bingchentiao
发表于 2013-5-22 09:56
|
只看该作者
Linux那些事儿 之 戏说USB(15)繁华落尽
模型
,
那些事儿
,
林清玄
,
余秋雨
台湾作家林清玄在接受记者采访时,如此评价自己的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接口走,各走各的路,分开了,就不再相见。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议