Linux 设备模型中三个很重要的概念就是总线、设备和驱动,即 bus 、 device 和 driver 。而实际上内核中也定义了这么一些数据结构,他们是 struct bus_type , struct device , struct device_driver ,这三个重要的数据结构都来自同一个地方,称 include/linux/device.h 。

我们知道总线有很多种,如 PCI 总线、 SCSI 总线、 USB 总线,所以我们会看到 Linux 内核代码中出现 pci_bus_type , scsi_bus_type , usb_bus_type ,它们都是 struct bus_type 类型的变量。而 struct bus_type 结构中两个非常重要的成员就是 struct kset drivers 和 struct kset devices 。 kset 和另一个叫做 kobject 正是 2.6 内核中设备模型的基本元素。

这里我们只需要知道, drivers 和 devices 的存在,让 struct bus_type 与两个链表联系了起来,一个是 devices 的链表,一个是 drivers 的链表。也就是说,知道一条总线所对应的数据结构,就可以找到这条总线所关联的设备,及支持这类设备的驱动程序。

而要实现这些目的,就要求每次出现一个设备就要向总线汇报,或者说注册。每次出现一个驱动,也要向总线汇报,或者注册。比如系统初始化 时 ,会扫描连接了哪些设备,并为每一个设备建立起一个 struct device 的变量,每一次有一个驱动程序,就要准备一个 struct device_driver 结构的变量。把这些变量统统加入相应的链表, 设备 插入 devices 链表, 驱动 插入 drivers 链表。 这样通过总线就能找到每一个设备,每一个驱动。

然而,假如计算机里只有设备却没有对应的驱动,那么设备无法工作。反过来,倘若只有驱动却没有设备,驱动也起不了任何作用。 设备 开始多了, 驱动 开始多了,它们像是两个来自世界, 设备 们彼此取暖, 驱动 们一起狂欢,但它们有一点是相同的,都只是在等待属于自己的那个另一半。

《Linux那些事儿之我是USB》我是U盘(7)狂欢是一群人的孤单相关推荐

  1. Linux那些事儿之我是U盘(7)狂欢是一群人的孤单

    Linux设备模型中三个很重要的概念就是总线,设备,驱动.即bus,device,driver,而实际上内核中也定义了这么一些数据结构,他们是struct bus_type,struct device ...

  2. 《Linux那些事儿之我是USB》我是U盘(7)狂欢是一群人的孤单--总结

    (1) Linux 设备模型中三个很重要的概念就是总线.设备和驱动,即 bus . device 和 driver . struct bus_type , struct device , struct ...

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

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

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

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

  5. Linux那些事儿 之 戏说USB(5)我是谁

    我是谁?USB一遍一遍问着自己,当然它不会真的是一颗树.USB只是Linux庞大家族里的一个小部落,host controller是它们的族长,族里的每个USB设备都需要被系统识别,被我们识别.虽然清 ...

  6. Linux那些事儿 之 戏说USB(3)我是一棵树

    从拓扑上来看,USB子系统并不以总线的方式来部署,它是一颗由几个点对点的连接构成的树. 它主要包括了USB连接.USB host controller和USB device三个部分.而USB devi ...

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

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

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

    回到struct usb_hcd,继续努力的往下看. 7行,又见kref,usb主机控制器的引用计数.struct usb_hcd也有自己专用的引用计数函数,看drivers/usb/core/hcd ...

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

    下面接着看那三个基本点. 第一个基本点,usb_alloc_urb函数,创建urb的专用函数,为一个urb申请内存并做初始化,在drviers/usb/core/urb.c里定义. struct ur ...

最新文章

  1. 清华大数据软件成果亮相第三届数字中国建设峰会成果展览
  2. Hyperopt中文文档:FMin
  3. 罗永浩直播翻车频现,抖音选错了吗?
  4. Linux中如何使用gThumb批量调整图片大小
  5. ASP.NET Session的七点认识(转)
  6. 在tornado里面使用reverse_url
  7. 02. 重构-代码的坏味道
  8. iReport下载安装配置及编译
  9. 《给青年的十二封信》2-谈动—朱光潜
  10. 谷歌发布 12 款 Chrome 新皮肤
  11. Win10下运行复活之秦殇前传
  12. Android 8.1 应用安装过程总结
  13. 循环神经网络(RNN)之长短期记忆(LSTM)
  14. 计算机专业选i5八代还是i7八代,八代i5真的比七代i7更好?看看玩家的测试就知道!...
  15. 《江畔独步寻花》评课稿
  16. 汇编语言——子程序调用
  17. unity3D 法线贴图的制作与使用
  18. 【Java基础】(六-上)java控制流程——顺序结构和分支结构
  19. Docker部署深度学习服务器,CUDA+cudnn+ssh
  20. Java四种线程池类

热门文章

  1. 奔跑吧linux内核-使用qemu运行linux系统
  2. 学计算机电脑显存多少为好,【深度分析】如何配置深度学习用的电脑(显卡和内存的选择标准)...
  3. 电脑上如何打开sqlitedb格式的文件?
  4. 免疫表位数据库(IEDB)数据下载操作实例
  5. 10---字符个数统计
  6. Excel引用外部数据链接地址修改/引用地址修改/公式更改
  7. 卡尔曼滤波(KF)无迹卡尔曼滤波(UKF)
  8. 北京今年已发生7次因乘客打架影响地铁运营-打架-地铁-地铁打架
  9. 深入理解计算机系统_00
  10. Eigen: C++开源矩阵计算库