Linux 2.6的设备驱动模型中,所有的device都是通过Bus相连。device_register() / driver_register()执行时通过枚举BUS上的Driver/Device来实现绑定,本文详解这一过程。这是整个LINUX设备驱动的基础,PLATFORM设备,I2C上的设备等诸设备的注册最终也是调用本文讲述的注册函数来实现的。

Linux Device的注册最终都是通过device_register()实现,Driver的注册最终都是通过driver_register()实现。下图对照说明了Device和Driver的注册过程。

上面的图解一目了然,详细过程不再赘述。注意以下几点说明:

  • BUS的p->drivers_autoprobe;1默认是true。
  • bus_for_each_drv()是对BUS上所有的Driver都进行__device_attach()操作;同样的,bus_for_each_dev()是对BUS上所有的Device都进行__driver_attach()操作。
  • BUS上实现的.match()函数,定义了Device和Driver绑定时的规则。比如Platform实现的就是先比较id_table,然后比较name的规则。如果BUS的match()函数没实现,认为BUS上的所有的Device和Driver都是match的,具体后续过程要看probe()的实现了。
  • Probe的规则是:如果BUS上实现了probe就用BUS的probe;否则才会用driver的probe。

Device一般是先于Driver注册,但也不全是这样的顺序。Linux的Device和Driver的注册过程分别枚举挂在该BUS上所有的Driver和Device实现了这种时序无关性。

linux device 与driver prove 过程相关推荐

  1. Linux Device和Driver注册过程,以及Probe的时机

    Linux 2.6的设备驱动模型中,所有的device都是通过Bus相连.device_register() / driver_register()执行时通过枚举BUS上的Driver/Device来 ...

  2. linux bus、driver、device及三者的关系

    一.概念 1.bus     总线是处理器和设备之间的通道.总线有多种类型,每种总线可以挂载多个设备. 2.driver     驱动程序是在CPU运行时,提供操作的软件接口.所有的设备必须有与之配套 ...

  3. linux设备驱动——bus、device、driver加载顺序与匹配流程

    文章目录 1. 前言 2. 概念 2.1. 数据结构 2.2. probe函数 3. bus.device.driver加载顺序 3.1. 加载方式 3.2. 加载顺序 4. device.drive ...

  4. linux通过platform_match()匹配platform总线上的device和driver

    \kernel\msm-4.9\drivers\base\platform.c定义了platform_match()的实现,先来看定义 /*** platform_match - bind platf ...

  5. linux设备驱动模型 - device/bus/driver

    在linux驱动模型中,为了便于管理各种设备,我们把不同设备分别挂在他们对应的总线上,设备对应的驱动程序也在总线上找,这样就提出了deivce-bus-driver的模型,硬件上有许多设备总线,那么我 ...

  6. linux设备模型,bus,device,driver,实验遇到的问题

    这个问题困扰了我好久,对于内核的不熟悉,一开始是出现了使用空指针的问题,部分错误提示如下 Unable to handle kernel NULL pointer dereference at vir ...

  7. linux 驱动 device,driver ,bus 关系

    对于Linux驱动开发来说,设备模型的理解是根本,顾名思义设备模型是关于设备的模型,设备的概念就是总线和与其相连的各种设备了. 设备是通过总线连到计算机上的,需要对应的驱动才能用,可是总线是如何发现设 ...

  8. Linux中SDIO命令,linux device driver之sdio驱动编程分享

    linux device driver之sdio驱动编程分享 闯客网 • 2018-12-19 • 技术交流 [p=26, null, left]先谈谈如何写linux驱动:[/p]- 在驱动模块初始 ...

  9. Linux设备模型(4) — bus 与 device 和 driver

    前面说了 device 和 device_driver,这两者是通过一个叫 bus 的东西联系在一起,不管这个 bus 是否是真实的存在(虚拟的也算). 1.Bus Linux 中,对 bus 是由一 ...

  10. linux device结构体,struct device结构体

    一.定义: linux/include/linux/device.h struct device { struct klist     klist_children; struct klist_nod ...

最新文章

  1. oss2模块和aliyun oss连接
  2. 前谷歌工程团队负责人:如何打造一个完美的产品
  3. kibana. 登陆
  4. Mac系统安装Aircrack-ng破解wifi密码(2)
  5. Alpine Linux 中的 apk 命令讲解
  6. 【2016年第5期】数据科学人才的需求与培养
  7. 每天进步一点点《SVD用于压缩》
  8. 一张表不能超过多少索引_论文一般查重率不能超过多少
  9. android怎么设置iphone字体,冲浪阅读:安卓、苹果手机字体怎么改
  10. latex 插图 上下放_专辑插图中上下文中的文本
  11. markdown颜色索引及表格背景颜色填充
  12. poj1061青蛙的约会
  13. 架构之——umi框架与dva的使用
  14. 关于触摸屏的一些硬件知识
  15. 【记录】嵌入式经典通信UART理解
  16. 想与你携手,一起看朝阳,看春夏秋冬变换,送给傻丫头一桶代码可否?
  17. C程序设计谭浩强第五版课后答案 第三章习题答案
  18. Arduino 入门教程(十六) E18-D50NK红外避障传感器
  19. 区块链在改善网络安全方面的潜力?
  20. PDFgetXPDFgetN 软件分享

热门文章

  1. php最小二乘法,Python中实现最小二乘法思路及实现代码
  2. iP138版 离线iP数据库ip.txt导入Mysql示例
  3. SSD-Tensorflow 目标检测(自定义数据集(VOC2007格式))
  4. [篇二章六]_关于 Windows 11 处于通知状态
  5. 《战狼2》,我可以说点什么
  6. 手机使用小技巧,简单易懂 7610用蓝牙发送SIS文件方法(转)
  7. java批量打包下载网络图片
  8. 实时互联网的隐形风口
  9. 解决ImportError: cannot import name ‘bbox_overlaps_cython‘
  10. 一个IT技术人员的回忆“痛并快乐着”