新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux SDIO總線驅動

        Linux SDIO總線驅動

        作者: 時間:2016-12-15 來源:網絡 收藏

        三.驅動加載

        我們還是以SDIO驅動為例,注冊一個SDIO驅動會調用下面的函數。

        int sdio_register_driver(struct sdio_driver*drv)

        {

        drv->drv.name= drv->name;

        drv->drv.bus= &sdio_bus_type;

        returndriver_register(&drv->drv);

        }

        其實很好理解sdio_driver其實是driver的封裝,并且該driver的bus為sdio_bus_type。這個設備的驅動很簡單。那來看sdio_driver結構

        struct sdio_driver{

        char*name; --驅動名稱

        conststruct sdio_device_id *id_table; --驅動設備ID

        int(*probe)(struct sdio_func *, const struct sdio_device_id *);

        void(*remove)(struct sdio_func *);

        structdevice_driver drv;

        };

        id_table很熟悉吧,嘿嘿在usb的驅動中如何將設備和驅動匹配就是根據這個東西。在SDIO中也是根據該id_table來進行設備和驅動的匹配。

        四.驅動和設備匹配

        在介紹了設備注冊和驅動注冊后,那來看這兩個是怎樣匹配的。記住SDIO驅動之上有兩條總線一個mmc bus 一個是SDIO bus。

        先來看mmc bus的match

        static int mmc_bus_match(struct device *dev,struct device_driver *drv)

        {

        return1;

        }

        這個很省事,直接就是1.

        那在看sdio bus 的match

        static int sdio_bus_match(struct device *dev,struct device_driver *drv)

        {

        structsdio_func *func = dev_to_sdio_func(dev);

        structsdio_driver *sdrv = to_sdio_driver(drv);

        if(sdio_match_device(func, sdrv))

        return1;

        return0;

        }

        通過查看上面的具體code的實現你就會發現就是根據id_table來實現設備和驅動的匹配。

        五.probe

        不管在設備注冊還是驅動注冊時,如果發現存在對應的設備和驅動則會調用對應的驅動。不過記住一點是均會先調用mmc bus的probe其次是sdio bus的probe。其實現的過程與platfrom類似,不多加贅述。

        六.總結

        SDIO說白了還是一種總線,其本質還是離不開驅動和設備這兩者,如果有usb驅動的經驗則會很好的理解SDIO總線的驅動。在linux內核是可以觸類旁通的

        - sdio_register_driver():向系統注冊sdio接口驅動,調用以后,系統會觸發sdio設備id檢測,如果設備id和接口驅動里.id_table里定義的id一致,則系統調用probe函數。1. 可以在DibBridgeTargetModuleInit()里調用,這樣insmod之后,驅動接口即被注冊(設備id被注冊),有相應設備插入則probe會被調用(此種做法參考LinuxKernelSdioMx28)2. 也可以在sdio初始化時調用,這樣設備插入時,probe不會被調用,只有在sdio初始化,sdio_register_driver()被調用時,系統才會重新檢測設備id,并調用probe。(此種做法好處是,模塊初始化不涉及何種設備,具有更好的通用性。參考LinuxKernelSdioMx53)


        上一頁 1 2 3 下一頁

        關鍵詞: LinuxSDIO總線驅

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 建瓯市| 启东市| 慈利县| 湛江市| 上饶县| 那坡县| 正镶白旗| 沁阳市| 乐业县| 习水县| 八宿县| 垫江县| 光山县| 龙南县| 乐业县| 团风县| 西乌珠穆沁旗| 祁阳县| 木兰县| 古浪县| 广州市| 曲沃县| 民丰县| 通许县| 拉孜县| 广昌县| 拉萨市| 阿拉善右旗| 巴林左旗| 梓潼县| 和政县| 五原县| 溧水县| 双柏县| 宁晋县| 上杭县| 七台河市| 驻马店市| 武宁县| 靖安县| 福州市|