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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用LayUI操作数据表格「建议收藏」

    使用LayUI操作数据表格「建议收藏」接着 上一篇 继续完善我们的demo,这次我们加一个搜索按钮搜索源代码地址点我在table标签的上方,加入这样一组html<divclass="demo

    2022年8月3日
    1
  • 课设-基于51单片机的智能小车(循迹+避障+APP控制)[通俗易懂]

    课设-基于51单片机的智能小车(循迹+避障+APP控制)[通俗易懂]基于51单片机的智能小车,可以实现循迹、避障、APP控制等功能;顺便提了一下自己大学的“造车”史!

    2022年10月11日
    1
  • 四大主流芯片架构(X86、ARM、RISC-V和MIPS)

    四大主流芯片架构(X86、ARM、RISC-V和MIPS)目前市场上主流的芯片架构有X86、ARM、RISC-V和MIPS四种:序号架构特点代表性的厂商运营机构发明时间1X86性能高,速度快,兼容性好英特尔,AMD英特尔1978年2ARM成本低,低功耗苹果,谷歌,IBM,华为英国ARM公司1983年3RISC-V模块化,极简,可拓展三星,英伟达,西部数据RISC-V基金会2014年…

    2022年5月24日
    747
  • 决策引擎选购指南[通俗易懂]

    决策引擎选购指南[通俗易懂]决策引擎选购指南决策引擎或规则引擎的概念在2015年随着互联网金融行业的发展得到了快速普及,逐渐被各大公司接纳并入到企业基础设施中,用于集中管理高频多变的业务运营策略,相对于原先的硬代码维护的方式,有着便捷、高效、低成本的特点。市面上关于决策引擎的分享不少,但主要集中在技术层面的经验分享,比如如何从0到1搭建一套决策引擎,大家如果感兴趣也可以自行进行查阅。反而从公司层面出发,如何评估以及选择决策引擎的文章十分有限,从而导致了公司在采购的时候往往因为信息不对称而十分被动。因此,本文将从一位…

    2022年6月24日
    31
  • java list和数组转换_java list转string

    java list和数组转换_java list转string使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。…

    2022年8月23日
    5
  • Java程序员如何从码农晋升为架构师,你跟架构师的差别在哪里?

    Java程序员如何从码农晋升为架构师,你跟架构师的差别在哪里?一、如何定义架构师Java架构师,首先要是一个Java程序员,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,怎么解决并发量、连接池,线程池。Java反射技术,写框架必备的技术,但是有严重的性能问题,替代方案Java字节码技术;nio,没什么好说的,值得注意的是”直接内存”的特点,使用场景;java多线程同步异步;ja…

    2022年7月8日
    78

发表回复

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

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