Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init函数注册,在drivers/usb/core/driver.c文件里定义

struct bus_type usb_bus_type = {.name =        "usb",.match =   usb_device_match,.uevent = usb_uevent,
};

name自然就是usb总线的绰号了。match这个函数充当了一个红娘的角色,在总线的设备和驱动之间牵线搭桥。match指向了函数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(drv))return 0;/* TODO: Add real matching code */return 1;} else if (is_usb_interface(dev)) {struct usb_interface *intf;struct usb_driver *usb_drv;const struct usb_device_id *id;/* device drivers never match interfaces */if (is_usb_device_driver(drv))return 0;intf = to_usb_interface(dev);usb_drv = to_usb_driver(drv);id = usb_match_id(intf, usb_drv->id_table);if (id)return 1;id = usb_match_dynamic_id(intf, usb_drv);if (id)return 1;}return 0;
}

第1行,经历了linux设备模型的繁华,参数我们都已经很熟悉了,对应的就是总线两条链表里的设备和驱动,也可以说是鹊桥版上的挂牌的和摘牌的。总线上有新设备或新的驱动添加时,这个函数总是会被调用,如果指定的驱动能够处理指定的设备,也就是匹配成功,函数返回0。梦想是美好的,现实是残酷的,匹配是未必成功的,红娘再努力,双方对不上眼也是实在没办法的事。
第4行,一遇到if和else,我们就知道又处在两难境地了,代码里我们可选择的太多。这里的岔路口只有两条路,一条给USB设备走,一条给USB接口走,各走各的路,分开了,就不再相见。

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

  1. Linux那些事儿 之 戏说USB(11)不一样的core

    转载地址:http://blog.csdn.net/fudan_abc/article/details/1792367 "生活中肯定还有比睡觉更好玩的事情!"大小卡梅拉们一直都抱有 ...

  2. Linux那些事儿 之 戏说USB(19)设备

    转载地址:http://blog.csdn.net/fudan_abc/article/details/1807800 第一眼看到struct usb_device这个结构,我仿佛置身于衡山路的酒吧里 ...

  3. 【转】Linux那些事儿 之 戏说USB(19)设备

    第一眼看到struct usb_device这个结构,我仿佛置身于衡山路的酒吧里,盯着舞池里扭动的符号,眼神迷离. 交大里苟了几年,毕业了又是住在学校附近的徐虹北路上,沿着虹桥路走过去,到徐家汇不过1 ...

  4. Linux那些事儿 之 戏说USB(33)字符串描述符

    关于字符串描述符,前面的前面已经简单描述过了,地位仅次于设备/配置/接口/端点四大描述符,那四大设备必须得支持,而字符串描述符对设备来说则是可选的. 这并不是就说字符串描述符不重要,对咱们来说,字符串 ...

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

    现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都彼此的挤在一起,所以得想 ...

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

    struct usb_device结构冗长而又杂乱 include/linux/usb.h struct usb_device {int devnum;char devpath[16];u32 rou ...

  7. Linux那些事儿 之 戏说USB(25)设备的生命线(四)

    转载地址:http://blog.csdn.net/fudan_abc/article/details/1819919 洗澡是屁股享福,脑袋吃苦:看电影是脑袋享福,屁股吃苦:看内核代码是脑袋.屁股都吃 ...

  8. Linux那些事儿 之 戏说USB(大结局)还是那个match

    从上次在几米的向左走向右走遇到usb总线的那个match函数usb_device_match()开始到现在,遇到了设备,遇到了设备驱动,遇到了接口,也遇到了接口驱动,期间还多次遇到usb_device ...

  9. Linux那些事儿 之 戏说USB(27)设备的生命线(十)

    跟着设备的生命线走到现在,我算是明白了,什么东西的发展都是越往后越高级越复杂.再给张小表,看看现在和上次那张表出现的时候有什么变化. state        USB_STATE_ADDRESS sp ...

最新文章

  1. java c 序列化_Java 序列化
  2. scipy.spatial.distance 与 sklearn cosine_similarity
  3. Expected image (JPEG, PNG, or GIF), got empty file
  4. Sencha-概念-Events(事件)(官网文档翻译10)
  5. CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界(并查集+第二分块)
  6. Django框架——类视图
  7. mysql nhibernate_C#连接Mysql数据库NHibernate
  8. sublime配置go环境_sublime Text3配置go编译环境
  9. 假如Python有C/C++ 的性能,会不会称霸IT界?
  10. linux内核分支,新闻|Linux 内核分支 2.4 版结束生命周期
  11. 【编译器】G++相关编译命令
  12. 去除标题_1688如何通过黄金标题引爆流量?
  13. 对FT证券系统故障的分析与思考
  14. 《概率论基础教程》总结 -- 样本空间、概率、条件概率 等
  15. Android Textview控件基础属性
  16. h5中的结构元素header、nav、article、aside、section、footer介绍
  17. java lua脚本_在Java中使用Lua脚本语言
  18. 2794: [Poi2012]Cloakroom
  19. 检察院批准逮捕洪磊,铁杆分子不买帐
  20. 三脚架代表人生_如何选择和使用三脚架

热门文章

  1. Python 的基本数据类型
  2. Android 替换TextView 里面指定的符号
  3. 题解 P4692 【[Ynoi2016]谁的梦】
  4. SpringBoot 统一时区的方案
  5. (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!
  6. Vue(十)生命周期
  7. PL/SQL Developer(解压版)连接64位的Oracle11g
  8. 多个矩形,求覆盖面积,周长,及交点
  9. MySQL 存储过程传参之in, out, inout 参数用法
  10. Discuz! X2.5 添加自定义数据调用模块(简单方法)