注册驱动时如何调用probe函数 ?
platform_driver_register
driver_register
bus_add_driver //把驱动放入总线的驱动链表里
driver_attach
bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);//遍历该总线上所有的device,执行一次__driver_attach(),看能不能将驱动关联(attach)到某个设备上去。
__driver_attach
driver_probe_device(drv, dev)
if (drv->bus->match && !drv->bus->match(dev, drv)) //调用驱动的总线上的match函数,查看驱动与设备是否匹配
goto done;
really_probe(dev, drv);
if (dev->bus->probe) {
ret = dev->bus->probe(dev); //(如果bus->probe非空,则调用bus->probe)
if (ret)
goto probe_failed;
}
else if (drv->probe)
{
ret = drv->probe(dev); //调用驱动的probe函数
if (ret)
goto probe_failed;
}
总结,注册一个某个bus的驱动就是先把驱动自己链入到bus驱动链表中去,
在从bus的设备链表中一一寻找,看有没有自己可以关联上的设备。找到就probe,
再把二者bind起来。反之,添加设备道理也是一样的。
选中代码后,按tab键,整体后移;按shift + tab键,整体前移
注册驱动时如何调用probe函数 ?的更多相关文章
- (转)platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备
platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备 2011-10-24 19:47:07 分类: LINUX kernel_init中d ...
- platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备【转】
转自:http://blog.chinaunix.net/uid-25508271-id-2979412.html kernel_init中do_basic_setup()->driver_in ...
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析 ⭐⭐⭐
add platform_device之后,需要注意的一个地方是这里,add是通过系统初始化里边调用platform_add_devices把所有放置在板级platform_device数组中的所有 ...
- platform驱动之probe函数
驱动注册的probe函数 probe函数在设备驱动注册最后收尾工作,当设备的device 和其对应的driver 在总线上完成配对之后,系统就调用platform设备的probe函数完成驱动注册最后工 ...
- linux中probe函数中传递的参数来源(上)
点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...
- platform_driver_register()--如何match之后调用probe
int platform_driver_register(struct platform_driver *drv) { drv->driver.bus = &platform_bus_t ...
- Samsung_tiny4412(驱动笔记03)----字符设备驱动基本操作及调用流程
/*********************************************************************************** * * 字符设备驱动基本操作及 ...
- probe函数何时调用的
转自:http://blog.csdn.net/xiafeng1113/article/details/8030248 Linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名 ...
- linux中 probe函数的何时调用的?
点击打开链接 linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名字匹配,BUS就会调用驱动的probe函数,但是有时我们要看看probe函数里面到底做了什么,还有传递给p ...
随机推荐
- vmware增加共享文件夹
增加共享文件夹 VMWare提供共享文件夹功能.前提是在虚拟机中安装VMware tools 1. 安装VMware tools 会自动在虚拟机中的/media/VMware Tools/中有个压缩包 ...
- 委托,lambda,匿名方法
lambda表达式其实就是匿名方法的变体或者说简写. 原来我们用 delegate void Del(int x); Del d = delegate(int x) { return x + 1; } ...
- Xcode export/upload error: Your session has expired. Please log in 解决方法
问题: 突然打包账号不好使了 重登 重启 清缓存 一套都打完了 还是不好使 解决方法: 删除掉其他账号 重新登录 参考网址 http://stackoverflow.com/ques ...
- STM32F103: NRF24L01
看了两天的24l01的相关资料了,一直有点模糊,今天下午感觉有点懂了,在板子上调试成功了,但是还没进行通讯测试.stm32和arduino进行通信还没成功 ,:( 先把stm32的NRF24L01配置 ...
- 哈工大同义词词林 python 使用范例
哈工大的同义词词林,应该是上个世纪的产物,里面的词比较老旧,但好歹也能用 同义词词林的作用,跟word2vec的获取相近词函数比较类似,这两者发挥的功效比较,看具体的应用吧 1. 首先下载包含同义词的 ...
- (二十八)static关键字
/* * static 静态的 * static修饰的成员变量的特点 * 1.static修饰的成员变量是该类的所有对象共享 * 2.static修饰的成员变量是随着类的加载就 ...
- hibernate的list和iterate的区别
一.先介绍一下java中的缓存系统JCS(java cache system) 1.JCS(Java Caching System)是一个对象Cache,它可以把Java对象缓存起来,提高那些访问频 ...
- inline 关键字
inline 定义一个函数时最好前面再加上static: static inline 定义的函数,会在链接阶段将代码段中没有使用的inline 函数定义“剔除”,从而减小编译体积:即使加了-g参数仍然 ...
- 【转】C# Socket编程(3)编码和解码
[转自:https://www.cnblogs.com/IPrograming/archive/2012/10/13/CSharp_Socket_3.html] 在网络通信中,很多情况下:比如说QQ聊 ...
- LeetCode Complex Number Multiplication
原题链接在这里:https://leetcode.com/problems/complex-number-multiplication/description/ 题目: Given two strin ...