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

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

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

转载于:https://www.cnblogs.com/-glb/p/11186084.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值