• 深入分析总线设备驱动模型的框架


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

    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这两大过程是不缺少的。

  • 相关阅读:
    表单文件上传
    页面布局
    HDU 2089 不要62
    洛谷 P1776 宝物筛选(多重背包)
    HDU 5569 matrix
    洛谷 P1244 青蛙过河
    洛谷 P2362 围栏木桩
    洛谷 P2719 搞笑世界杯
    洛谷 P1877 [HAOI2012]音量调节
    洛谷 P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…
  • 原文地址:https://www.cnblogs.com/-glb/p/11186084.html
Copyright © 2020-2023  润新知