platform總線

一:什麼是平臺總線

    相對於I2C SPI USB等總線實際存在的物理總線來說,平臺總線是一種虛擬的總線,它並不對應實際的物理總線。

二:爲什麼需要平臺總線

    linux從2.6起就加入了一套新的驅動管理和註冊的機制platform平臺總線。平臺總線中使用platform_device()來註冊一個設備,使用platform_driver()來註冊一個驅動。於傳統的bus/device/driver機制相比,platform由內核進行統一管理,在驅動中使用資源,提高了代碼的安全性和可移植性。個人理解,platform總線的作用就是用於將哪些不對應實際的物理總線的設備和驅動進行一個統一的管理。

三:platform總線的主要函數

1:platform_device_register():向platform總線註冊設備,調用層次關係

platform_device_register()

    platform_device_add()

        device_add()    // 向內核註冊設備


2:platform_driver_register():向platform總線註冊驅動,調用層次關係

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():驅動和設備匹配成功後自動執行的探測函數。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章