platform总线概述

虚拟总线驱动概述

1 platform总线有什么作用?

platform总线的作用就是用于将哪些不对应实际的物理总线的设备和驱动进行一个统一的管理
主要用来管理CPU的片上资源,具有更好的移植性

2 platform总线与其他总线的区别?

Platform总线只是为了方便管理挂接在CPU总线上的设备,与用户空间的交互,如读写还是需要利用file_operations。
platform bus提供机制访问SOC的资源,而I2C等总线提供访问挂接的外设设备的机制,如交互接口:file_operations。
注意:一般platform的probe函数需要编码者提供设备与用户的交互接口,file_operations等。

3、platform源码分析

3.1 驱动注册

platform_driver_register
-> drv->driver.bus = &platform_bus_type; // 注册总线类型为platform总线
-> driver_register
-> driver_find // 通过platform_driver.device_driver.name判断该驱动是否已经注册到platform上
-> bus_add_driver // 根据总线类型添加驱动
-> driver_attach // driver去匹配device
-> bus_for_each_dev(drv->bus, NULL, drv, __driver_attach) // 遍历这个bus上的每个设备,都调用一次__driver_attach
-> __driver_attach
-> driver_match_device // 调用bus的match函数,drv->bus->match(dev, drv)
-> platform_match // 1. 如果drv中有id_table则先匹配drv的id_table.name和dev.name
// 2. 如果不存在id_table,则匹配drv.name和dev.name
-> platform_match_id // 先匹配drv的id_table.name和dev.name
-> strcmp(pdev->name, drv->name // 匹配drv.name和dev.name
-> driver_probe_device // 匹配成功后,开始调用probe函数
-> really_probe // 1. 如果总线中存在probe函数,则调用总线的probe
// 2. 如果总线中不存在probe函数,则调用驱动自己的probe函数
if (dev->bus->probe) {
ret = dev->bus->probe(dev);
if (ret)
goto probe_failed;
} else if (drv->probe) {
ret = drv->probe(dev);
if (ret)
goto probe_failed;
}
-> klist_add_tail // 加入bus的drv链表
-> kobject_uevent // sysfs文件,暂不发散学习
-> driver_add_groups // 将总线驱动添加到对应组中

3.2 设备注册

platform_device_register
-> platform_device_add
-> pdev->dev.bus = &platform_bus_type; // 注册总线类型为platform总线
-> device_add
-> bus_add_device // 加入bus的dev链表中
-> kobject_uevent // sysfs文件,暂不发散学习
-> bus_probe_device // 匹配
-> device_attach // 设备去匹配driver
bus_for_each_drv(dev->bus, NULL, dev, __device_attach); // 遍历这个bus上的每个drv,都调用一次__device_attach
-> __device_attach
-> driver_match_device // 调用bus的match函数,drv->bus->match(dev, drv)
-> 以下同驱动部分,都是调用bus的match函数进行匹配

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值