一:什么是平台总线linux
相对于I2C SPI USB等总线实际存在的物理总线来讲,平台总线是一种虚拟的总线,它并不对应实际的物理总线。安全
二:为何须要平台总线ide
linux从2.6起就加入了一套新的驱动管理和注册的机制platform平台总线。平台总线中使用platform_device()来注册一个设备,使用platform_driver()来注册一个驱动。于传统的bus/device/driver机制相比,platform由内核进行统一管理,在驱动中使用资源,提升了代码的安全性和可移植性。我的理解,platform总线的做用就是用于将哪些不对应实际的物理总线的设备和驱动进行一个统一的管理。函数
三:platform总线的主要函数spa
1:platform_device_register():向platform总线注册设备,调用层次关系orm
platform_device_register()资源
platform_device_add()it
device_add() // 向内核注册设备
table
2:platform_driver_register():向platform总线注册驱动,调用层次关系form
platform_driver_register()
driver_register() //向内核注册驱动
3: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的匹配过程是:
先根据idtable的名字进行匹配,若是匹配失败,则再根据device和driver的名字进行匹配,若是匹配还匹配不成功,则说明驱动和设备不匹配,若是这里匹配失败,则会调用platform_driver_probe()函数
4:platform_driver_probe():驱动和设备匹配成功后自动执行的探测函数。