platform_driver_register( )过程追踪

platform_driver_register( )过程追踪以下代码源于linux3.1.9。platform_driver_register()是内核中非常著名的函数。platform_driver_register()负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe()。刨去参数检查、错误处理,platform_driver_register的主要过程如下:。。。{。。。retur…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

以下代码源于linux3.1.9。

platform_driver_register( ) 是内核中非常著名的函数 。platform_driver_register( )负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe( )。刨去参数检查、错误处理,platform_driver_register的主要过程如下:

。。。 

    。。。 
    return platform_driver_register(&bcm2708_i2c_driver);

    。。。 
}   

int platform_driver_register(struct platform_driver *drv) 

    。。。 
    return driver_register(&drv->driver); 
}

int driver_register(struct device_driver *drv) 

    。。。 
    ret = bus_add_driver(drv);                    //platform是一个虚拟总线 
    。。。 
}

int bus_add_driver(struct device_driver *drv) 

    。。。 

    if (drv->bus->p->drivers_autoprobe) { 
        error = driver_attach(drv);                                           
        if (error) 
            goto out_unregister; 
    } 
    。。。 
    kobject_uevent(&priv->kobj, KOBJ_ADD);                   //发送uevent消息 
    return 0; 
    。。。 
}

int driver_attach(struct device_driver *drv) 

    return bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);  //监测到bus设备,调用__driver_attach( )
}

static int __driver_attach(struct device *dev, void *data)                    //dev 为使用驱动程式的设备结构体 

    。。。 
    if (!dev->driver) 
        driver_probe_device(drv, dev); 
    。。。 
    return 0; 
}

int driver_probe_device(struct device_driver *drv, struct device *dev) 

    。。。 
    ret = really_probe(dev, drv); 
    。。。 
}

static int really_probe(struct device *dev, struct device_driver *drv) 

    。。。 
    dev->driver = drv; 
    if (driver_sysfs_add(dev)) {           //在sysfs中添加设备的Kobject目录和熟悉文件 
         。。。 
    } 
    if (dev->bus->probe) { 
       。。。

    } else if (drv->probe) { 
        ret = drv->probe(dev);               //调用driver的probe( ),dev为设备结构体 
        。。。

    } 
     。。。 
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158249.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux如何安装node.js_centos安装nodejs

    linux如何安装node.js_centos安装nodejslinux环境:\n安装node环境和yarn工具详解

    2025年9月2日
    4
  • 程序员周六给心爱的“她”放电的动人故事「建议收藏」

    文章目录0x000x010x020x030x040x00注:此文是一篇流水扯淡文,我和她的故事。你的她还好吗?你有没有遇到过喜欢的她,昨天对你还眉开目笑,含情脉脉,今天就爱搭不理,毫无兴趣。不管你有没有遇到,反正我遇到了。我说的她不是你想的她,我说的她是有着15.6寸1080P超清的容颜的我的“acer 笔记本”。前段时间刚刚换的新的电池,然而今天一拔掉电源线,她就自动关机,根据不给我一点点面子,让我倍感无奈和忧伤~今天是周六,没有“Jack 马”口中福报的我,这一天本该是简单且充实的一天,

    2022年3月1日
    40
  • 七牛云的使用

    七牛云的使用

    2021年10月28日
    89
  • iOS 学习视频 资料集合 (视频 +博客)[通俗易懂]

    iOS 学习视频 资料集合 (视频 +博客)[通俗易懂]转载:https://blog.csdn.net/yst19910702/article/details/78809472无意间在网上发现一些学习资源,分享下。资源主要是一些视频资源和博客网站。这些资源主要针对一些初中学着。利用一些基础知识点,中级有小码哥的视频里的视频和组件化。(后面有些博客真的很不错)。总之都是杂七杂八的,分享出来旨在共同学习。有不好的地方还望指教。 虽然都是一些培训班的视频,…

    2022年7月27日
    6
  • C++中顶层const和底层const

    C++中顶层const和底层const

    2021年12月4日
    52
  • 转置卷积详解

    转置卷积详解转置卷积详解  前面文章对卷积做了讲解,感觉既然重新整理,就将系列概念整体做个梳理,也算是将自己知道的所有东西拿来献丑把。  转置卷积(TransposedConvolution)是后来的叫法,一开始大家都是称逆卷积/反卷积(Deconvolution),这个概念是在图像分割任务中被提出来的,图像分割需要逐像素的操作,对每一个像素做一个分割,将其归类到不同的物体当中。  这个任务大家很自然…

    2022年6月21日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号