一:什麼是平臺總線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():驅動和設備匹配成功後自動執行的探測函數。