Driver的prob的调用顺序
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的调用顺序相关推荐
- 必考题:子类继承父类,初始化以及方法调用顺序
前言: 最近重投简历,一家公司的笔试题,就是子类继承父类,初始化顺序以及方法的调用顺序,很遗憾,我做错了.所以,记录在这里,希望以后不要再错. 程序: // 父类 public class Paren ...
- 对应用程序启动时所有方法的调用顺序分析
一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问 ...
- 验证异常处理调用顺序
至个人年久失修的git博客搬运https://yusakul.github.io/ 验证异常处理调用顺序:VEH --> SEH --> VCH #include "stdafx ...
- Cpp 对象模型探索 / 带有虚继承类的构造函数的调用顺序
栗子 #include <iostream> class A { public:A() { std::cout << "A" << std::e ...
- c++构造函数和析构函数的调用顺序研究
构造函数与析构函数的调用顺序 构造函数与析构函数的调用顺序 构造函数与析构函数的调用顺序 1)当类中有成员变量是其它类的对象时,首先调用成员变量的构造函数,调用顺序与声明顺序相同:之后调用自身类的构造 ...
- 多继承中构造器和析构器的调用顺序
多继承中构造器和析构器的调用顺序: 构造器的调用顺序就像盖房子,从最基层开始: 析构器的调用顺序就像拆房子,从最顶层开始:
- 浅谈构造函数与构析函数的调用顺序(转载)
构造函数 先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决:构造函数的调用顺序总是如下: 1.基类构造函数.如果有多个基类,则构造函数的调 ...
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由"底层向上"开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达 ...
- Android中onInterceptTouchEvent、dispatchTouchEvent及onTouchEvent的调用顺序及内部原理
在Android中需要经常对用户手势进行判断,在判断手势时需要精细的分清楚每个触摸事件以及每个View对事件的接收情况,在View,ViewGroup,Activity中都可以接收事件,在对事件进行处 ...
最新文章
- linux磁盘分区指令
- boost::throw_exception简单的测试程序
- grenndao 插入表数据报错
- ​关于深度学习、NLP和计算机视觉的30个顶级Python库
- c++十进制转二进制_二进制与十进制如何互相转换?
- 在服务器上搭建基于yolo3 与crnn 实现中文自然场景文字检测及识别,GPU版本
- “彪悍人生”罗永浩被法院限制消费,网友:期待王者归来
- (1)FPGA面试题Setup和Holdup时间
- 如何把平板的虚拟键盘关掉_想知道Win10电脑启动使用的是BIOS还是UEFI,这该如何分辨?...
- 如何录制Gif动态图片
- vptr初始化语义学
- Blender小白最简单方法制作椅子
- sam格式的结构和意义_sam格式详细说明
- 区块链技术涉及哪些编程语言?
- 【金猿技术展】视频矫正技术——基于参数估计的自由几何变换算法
- 高考读卡机是谁发明的?
- 2022-10-10(通达OA SQL注入漏洞)
- PDF怎么编辑修改?如何编辑PDF的内容?
- 丁真人设崩塌?吸烟事件后,又爆深夜热聊女网红丨国仁网络
- 计算机程序设计员理论试题答案,计算机程序设计员理论试题库.doc
热门文章
- linux7.4 yum配置,redhat7.4配置yum
- 一只蝴蝶挥了挥翅膀,于是有了AI读心术
- 计算机局域网打不开怎么办,192.168.0.1打不开怎么办 192.168.0.1打不开解决方法【介绍】...
- 设备树之emmc驱动移植
- 计算机显示器桌面变小,电脑显示器显示变小怎么办
- 揭秘udesk智能质检:质检+分析双剑合璧
- 开发者出海跨境收款——如何完美解决限额问题?
- 学生机房随堂测试软件,如何使用随堂测试--立即测?
- 高精度减法(C语言实现)
- 广告投放管理平台 oython源码_【直播】全新腾讯广告投放管理平台如何帮助广告主乘风破浪...