http://blog.csdn.net/aaronychen/article/details/2109966

Driver的注册

Driver的prob的调用顺序

可以从bus_attach_device()看起,

1 bus_attach_device()调用device_attach(dev)

2 device_attach(): 调用bus_for_each_drv()遍历bus上的每个driver,当找到一个driver则用__device_attach()来判断是否匹配

3 __device_attach(): 直接调用driver_probe_device(drv, dev)

4 driver_probe_device(): 首先如果driver所在总线有match函数则先调用这个match来匹配,如不匹配则直接返回错误,否则接着调用really_probe(dev,drv)

5 really_probe(): 先判断dev所在总线是否有probe函数,有则调用它来匹配,失败则返回,正确则成功,如果总线没有probe则判断drv是否有probe函数,有则调用并匹配它.

6 drv->prob():  一般它是一类设备的probe,在它里面它会调用具体某个drv的probe函数,这个函数是在我们的驱动程序里面注册的.

下面以usb acm驱动为例:

<!--[if !supportLists]-->1    <!--[endif]-->注册: usb_register()注册我们的usb_driver对象;里面含有一个probe函数.并含有一个device_driver对象(其实这个对象才是真正注册到系统理的驱动对象)

<!--[if !supportLists]-->2    <!--[endif]-->Usb_register(): 调用usb_register_driver()

<!--[if !supportLists]-->3    <!--[endif]-->usb_register_driver(): 填充device_driver对象(包括一个usb_probe_interface函数,即USB设备类通用的probe函数), 最后通过driver_register注册这个device_driver.

Probe过程.
<!--[if !vml]--><!--[endif]-->

新的usb设备连上机器后, hub_port_connect_change会被调用

Driver的prob的调用顺序相关推荐

  1. 必考题:子类继承父类,初始化以及方法调用顺序

    前言: 最近重投简历,一家公司的笔试题,就是子类继承父类,初始化顺序以及方法的调用顺序,很遗憾,我做错了.所以,记录在这里,希望以后不要再错. 程序: // 父类 public class Paren ...

  2. 对应用程序启动时所有方法的调用顺序分析

    一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问 ...

  3. 验证异常处理调用顺序

    至个人年久失修的git博客搬运https://yusakul.github.io/ 验证异常处理调用顺序:VEH --> SEH --> VCH #include "stdafx ...

  4. Cpp 对象模型探索 / 带有虚继承类的构造函数的调用顺序

    栗子 #include <iostream> class A { public:A() { std::cout << "A" << std::e ...

  5. c++构造函数和析构函数的调用顺序研究

    构造函数与析构函数的调用顺序 构造函数与析构函数的调用顺序 构造函数与析构函数的调用顺序 1)当类中有成员变量是其它类的对象时,首先调用成员变量的构造函数,调用顺序与声明顺序相同:之后调用自身类的构造 ...

  6. 多继承中构造器和析构器的调用顺序

    多继承中构造器和析构器的调用顺序: 构造器的调用顺序就像盖房子,从最基层开始: 析构器的调用顺序就像拆房子,从最顶层开始:

  7. 浅谈构造函数与构析函数的调用顺序(转载)

    构造函数     先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决:构造函数的调用顺序总是如下: 1.基类构造函数.如果有多个基类,则构造函数的调 ...

  8. 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序

    构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由"底层向上"开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达 ...

  9. Android中onInterceptTouchEvent、dispatchTouchEvent及onTouchEvent的调用顺序及内部原理

    在Android中需要经常对用户手势进行判断,在判断手势时需要精细的分清楚每个触摸事件以及每个View对事件的接收情况,在View,ViewGroup,Activity中都可以接收事件,在对事件进行处 ...

最新文章

  1. linux磁盘分区指令
  2. boost::throw_exception简单的测试程序
  3. grenndao 插入表数据报错
  4. ​关于深度学习、NLP和计算机视觉的30个顶级Python库
  5. c++十进制转二进制_二进制与十进制如何互相转换?
  6. 在服务器上搭建基于yolo3 与crnn 实现中文自然场景文字检测及识别,GPU版本
  7. “彪悍人生”罗永浩被法院限制消费,网友:期待王者归来
  8. (1)FPGA面试题Setup和Holdup时间
  9. 如何把平板的虚拟键盘关掉_想知道Win10电脑启动使用的是BIOS还是UEFI,这该如何分辨?...
  10. 如何录制Gif动态图片
  11. vptr初始化语义学
  12. Blender小白最简单方法制作椅子
  13. sam格式的结构和意义_sam格式详细说明
  14. 区块链技术涉及哪些编程语言?
  15. 【金猿技术展】视频矫正技术——基于参数估计的自由几何变换算法
  16. 高考读卡机是谁发明的?
  17. 2022-10-10(通达OA SQL注入漏洞)
  18. PDF怎么编辑修改?如何编辑PDF的内容?
  19. 丁真人设崩塌?吸烟事件后,又爆深夜热聊女网红丨国仁网络
  20. 计算机程序设计员理论试题答案,计算机程序设计员理论试题库.doc

热门文章

  1. linux7.4 yum配置,redhat7.4配置yum
  2. 一只蝴蝶挥了挥翅膀,于是有了AI读心术
  3. 计算机局域网打不开怎么办,192.168.0.1打不开怎么办 192.168.0.1打不开解决方法【介绍】...
  4. 设备树之emmc驱动移植
  5. 计算机显示器桌面变小,电脑显示器显示变小怎么办
  6. 揭秘udesk智能质检:质检+分析双剑合璧
  7. 开发者出海跨境收款——如何完美解决限额问题?
  8. 学生机房随堂测试软件,如何使用随堂测试--立即测?
  9. 高精度减法(C语言实现)
  10. 广告投放管理平台 oython源码_【直播】全新腾讯广告投放管理平台如何帮助广告主乘风破浪...