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)
上一篇 2022年7月26日 下午11:46
下一篇 2022年7月26日 下午11:46


相关推荐

  • java中什么是继承,和继承的接口的关系?

    java中什么是继承,和继承的接口的关系?继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。面试题:一个接口可以继承多个接口.interfaceCextendsA,B{}是可以的.一个类可以实现多个接口:classDimplementsA…

    2022年7月7日
    29
  • 代理重加密_代理重加密BBS方案

    代理重加密_代理重加密BBS方案云计算中的数据机密性风险极大地阻碍了云计算的应用,而在用户端加密的模式对于数据共享来说非常不便,用户频繁的获取和释放授权将使得用户增效据加解密工作繁重。因此代理重加密技术在云端进行数据的密文转换,减轻了用户端的负担,同时加强了云端数据的保密性。一、代理重加密代理重加密是密文间的一种密钥转换机制,是由Blaze等人在1998年的欧洲密码学年会上提出的,并由Ateniese等人在2005年的网络和分布式系统安全研讨会议和2007年的美国计算机学会计算机与通信安全会议上给出了规范的形式化定义。在代理重加密中

    2025年10月14日
    3
  • matlab norm函数作用_norm值计算

    matlab norm函数作用_norm值计算%X为向量,求欧几里德范数,即。n=norm(X,inf)%求-范数,即。n=norm(X,1)%求1-范数,即。n=norm(X,-inf)%求向量X的元素的绝对值的最小值,即。n=norm(X,p)%求p-范数,即,所以norm(X,2)=norm(X)。命令矩阵的范数函数norm格式n=norm(A)

    2025年8月3日
    3
  • ios分屏_【iOS越狱】越狱源+插件整理更新

    ios分屏_【iOS越狱】越狱源+插件整理更新UN 官网 https unc0ver dev UN 开源 https github com pwn20wndstuf Undecimus releases 插件查询作者源 https www ios repo updates com 插件兼容性查询 https jlippold github io tweakCompati 自制 cydia 商店源 https www

    2025年9月29日
    6
  • SearchClaw:将 Elasticsearch 通过可组合技能引入 OpenClaw

    SearchClaw:将 Elasticsearch 通过可组合技能引入 OpenClaw

    2026年3月12日
    3
  • Pycharm 快捷使用 —— 鼠标滚轮快速调整字体大小

    Pycharm 快捷使用 —— 鼠标滚轮快速调整字体大小解决方案 字体大小调节

    2026年3月27日
    2

发表回复

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

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