zoukankan      html  css  js  c++  java
  • Linux 内核总线方法

    有几个给 bus_type 结构定义的方法; 它们允许总线代码作为一个设备核心和单独驱动之 间的中介. 在 2.6.10 内核中定义的方法是:

    int (*match)(struct device *device, struct device_driver *driver);

    这个方法被调用, 大概多次, 无论何时一个新设备或者驱动被添加给这个总线. 它 应当返回一个非零值如果给定的设备可被给定的驱动处理. (我们马上进入设备和 device_driver 结构的细节). 这个函数必须在总线级别处理, 因为那是合适的逻 辑存在的地方; 核心内核不能知道如何匹配每个可能总线类型的设备和驱动.

    int (*hotplug) (struct device *device, char **envp, int num_envp, char *buffer, int buffer_size);

    这个模块允许总线添加变量到环境中, 在产生一个热插拔事件在用户空间之前. 参 数和 kset 热插拔方法相同( 在前面的 "热插拔事件产生" 一节中描述 ).

    lddbus 驱动有一个非常简单的匹配函数, 它仅仅比较驱动和设备的名子: static int ldd_match(struct device *dev, struct device_driver *driver)

    {

    return !strncmp(dev->bus_id, driver->name, strlen(driver->name));

    }

    当涉及到真实硬件, match 函数常常在有设备自身提供的硬件 ID 和驱动提供的 ID 之间, 做一些比较.

    lddbus 热插拔方法看来象这样:

    static int ldd_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)

    {

    envp[0] = buffer;

    if (snprintf(buffer, buffer_size, "LDDBUS_VERSION=%s", Version) >= buffer_size)

    return -ENOMEM; envp[1] = NULL; return 0;

    }

    这里, 我们加入 lddbus 源码的当前版本号, 只是以防有人好奇.

  • 相关阅读:
    类的继承和方法重写
    引用地址的变化
    Java中代码块执行顺序
    冒泡排序实现原理
    JSP九大内置对象
    SSH框架运行流程
    springboot + maven 整合SSM
    Maven创建项目,Index.jsp报错
    一些js在线引用文档
    excel出现虚线怎么去掉?
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147669.html
Copyright © 2011-2022 走看看