zoukankan      html  css  js  c++  java
  • 深入分析总线设备驱动模型的框架

    总线设备驱动框架结构如下:

    device_add:

    1)会把device代表的结构体放入总线的bus_dev链表中;

    2)从bus_drv链表中取出每个drv,用总线的match函数判断drv能否支持该dev;

    3)如果能够支持,则调用drv中的probe函数;

    driver_register:

    1)会把driver代表的结构体放入总线的bus_drv链表中;

    2)从bus_dev链表中取出每个dev,用总线的match函数判断该drv能否支持取出的dev;

    3)如果能够支持,则调用drv中的probe函数。

    注意:match函数是根据驱动的名字和设备的名字是否一致来进行判断,如果两者相同,则调用驱动中的probe函数。至于在probe里面做什么事情,完全由自己决定。

    接下来,看一下platform_driver 和platform_device结构体。

    1 struct platform_driver {
    2     int (*probe)(struct platform_device *);
    3     int (*remove)(struct platform_device *);
    4     void (*shutdown)(struct platform_device *);
    5     int (*suspend)(struct platform_device *, pm_message_t state);
    6     int (*resume)(struct platform_device *);
    7     struct device_driver driver;
    8     const struct platform_device_id *id_table;
    9 };
     1 struct platform_device {
     2     const char    * name;
     3     int        id;
     4     struct device    dev;
     5     u32        num_resources;
     6     struct resource    * resource;
     7 
     8     const struct platform_device_id    *id_entry;
     9 
    10     /* MFD cell pointer */
    11     struct mfd_cell *mfd_cell;
    12 
    13     /* arch specific additions */
    14     struct pdev_archdata    archdata;
    15 };

    总线设备驱动模型的大致过程就是这样的,虽然随着内核版本的提高,描述设备板级信息的这部分代码被设备树逐渐代替。但是不管如何代替,device_add和driver_register这两大过程是不缺少的。

  • 相关阅读:
    工单系统(帮助中心)
    理解RESTful架构
    trace显示不出东西
    thinkphp
    在一个元素中查找子元素
    阻止表单元素失去焦点
    RelativeLayout不能调用measure去直接测量子元素
    兼容加载Xml字符串
    IE下载时提示无法下载,重试后成功
    借用layer让弹层不限制在iframe内部
  • 原文地址:https://www.cnblogs.com/-glb/p/11186084.html
Copyright © 2011-2022 走看看