我们以前了解过知识点:平台总线设备、驱动、设备驱动自动匹配;设备模型keyset/kobject;总线流程分析等。 这里我们继续看一个知识点 平台总线的注册流程分析。
文章目录
前言
通过了解设备模型 相关知识点:设备模型keyset/kobject;总线流程分析等来进一步了解平台总线注册流程。
同步之前的platform 总线相关知识点串联起来。
参考资料
迅为设备模型资料参考](https://blog.youkuaiyun.com/beijingxunwei/category_12551484.html)
注册一个自己的总线
在总线目录下创建属性文件
驱动-注册自己的总线并创建属性文件
总线注册流程理论分析实验
linux bus_register过程
Linux设备驱动模型简述(源码剖析)
驱动-总线bus注册流程分析
platform总线注册流程实例分析实验
驱动-平台总线-platform设备注册platform驱动注册篇
驱动-平台总线-probe
为什么参考资料总是把以前的知识点拉出来,是为了让知识更有层次和体系。 新知识和旧知识串联起来。
一、platform_bus_init 方法
platform_bus_init 是 Linux 内核中初始化平台总线(platform bus)的核心函数。平台总线是 Linux 设备驱动模型中用于连接没有物理总线的设备(通常是 SoC 上的集成设备)的虚拟总线。
启动位置-方法分析
在 /source/drivers/base/init.c 中启动的

源码
int __init platform_bus_init(void)
{
int error;
early_platform_cleanup();
error = device_register(&platform_bus);
if (error) {
put_device(&platform_bus);
return error;
}
error = bus_register(&platform_bus_type);
if (error)
device_unregister(&platform_bus);
return error;
}
early_platform_cleanup();
初始化资源管理,清理早期注册的平台设备,确保没有冲突。 这里不是我们讨论的核心目标,我们看看下面的方法
bus_register
这个不就是我们上一篇 驱动-总线bus注册流程分析 的知识点嘛。 看源码:
error = bus_register(&platform_bus_type);

我们讨论的核心重点就是 platform_bus_type 类型。 我们在 驱动-注册自己的总线并创建属性文件 篇中分简单使用并分析过这个api,简单了解了bus_type 结构体。

那我们就继续看看 platform_bus_type 结构体
思考bus_register
按照上一篇的知识点 驱动-注册自己的总线并创建属性文件 那么在/sys/bus 下面就应该有 platform_bus_type对应name 的结构体。
const struct bus_type platform_bus_type = {
.name = "platform",
.....
};
EXPORT_SYMBOL_GPL(platform_bus_type);


结构体platform_bus_type
const struct bus_type platform_bus_type = {
.name = "platform",
.dev_groups = platform_dev_groups,
.match = platform_match,
.uevent = platform_uevent,
.probe = platform_probe,
.remove = platform_remove,
.shutdown = platform_shutdown,
.dma_configure = platform_dma_configure,
.dma_cleanup = platform_dma_cleanup,
.pm = &platform_dev_pm_ops,
};
EXPORT_SYMBOL_GPL(platform_bus_type);
这里其实没有什么特别要讲的,都是一些基本的知识点

最低0.47元/天 解锁文章
500

被折叠的 条评论
为什么被折叠?



