Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
platform总线是一种虚拟的总线,响应的设备则为platform_device,而驱动则为platform_driver。Linux 2.6的设备驱动模型中,把I2C、RTC、LCD等都归纳为platform_device。
总线将设备和驱动绑定,在体系每注册一个设备的时刻,会寻找与之匹配的驱动;相反的,在体系每注册一个驱动的时刻,会寻找与之匹配的设备,而匹配由总线完成。
Linux2.6体系中定义了一个bus_type的实例platform_bus_type
- struct bus_type platform_bus_type = {
- .name = "platform",
- .dev_attrs = platform_dev_attrs,
- .match = platform_match, //设备和驱动应用match函数来断定是否匹配
- .uevent = platform_uevent,
- .pm = PLATFORM_PM_OPS_PTR,
- };
- /* platform_match函数用于匹配总线中的驱动和设备 */
- static int platform_match(struct device *dev, struct device_driver *drv)
- {
- struct platform_device *pdev = to_platform_device(dev);
- struct platform_driver *pdrv = to_platform_driver(drv);
- /* match against the id table first */
- if (pdrv->id_table)
- return platform_match_id(pdrv->id_table, pdev) != NULL;
- /* fall-back to driver name match */
- return (strcmp(pdev->name, drv->name) == 0);
- }
platform_match函数起首断定是否由id_table,如不雅有则应用id_table来进行匹配,不然,断定platform_device和platform_driver成员里的name,如不雅二者的name字段雷同则匹配,如不雅匹配则调用platform_driver的probe函数。
platform_device构造体的定义
- struct platform_device {
- const char * name; /* 名字 */
- int id;
- struct device dev;
- u32 num_resources; /* 资本总数 */
- struct resource * resource; /* 资本 */
推荐阅读
Linux Lite第一个支持Linux 4.14及如何安装
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 Linux Lite保护者Jerry Bezencon再次初次在Twitter上宣布他的基于Ubuntu的发行版的软件库中最新的Linux内>>>详细阅读
本文标题:Linux平台总线驱动设备模型
地址:http://www.17bianji.com/lsqh/38937.html
1/2 1