1. 程式人生 > >匯流排驅動和普通驅動的區別

匯流排驅動和普通驅動的區別

1.匯流排驅動中不但有驅動的註冊,還有裝置的註冊,當設備註冊的時候會尋找與之匹配的驅動,相反的註冊驅動的時候也會尋找與之匹配的裝置,由函式match完成,如果匹配成功了那就表明這個裝置已經可以使用了

struct platform_device s3c_device_wdt =
{
        .name = "s3c2410-wdt", //裝置名
        .id = - 1, .

};

2.普通驅動直接註冊驅動就可以了,

        當一個裝置想要註冊進這個amba匯流排時,它就會呼叫以初始化好了的amba_driver結構呼叫amba_driver_register()這個驅動註冊函式。而下一步這個函式就會呼叫通用的驅動註冊函式driver_register。
這個函式對其他函式的呼叫路徑如下:
        driver_register -> bus_add_driver -> driver_attach -> __driver_attach(對每個裝置) -> driver_probe_device -> drv->bus->match(dev, drv)(檢查這個裝置是否與新註冊的驅動匹配) ->    really_probe -> dev->bus->probe(dev)(如果存在) (否則) -> drv->probe(dev)
        而且我們還可以看到,傳遞給驅動probe的引數,是一個具體的裝置。這個結構是設備註冊的時候已經分配好的了。
3)裝置的註冊
        當往系統插入一個新的裝置時,他就會呼叫amba_device_register函式,這個過程跟驅動註冊的過程差不多。
        匯流排維護兩個佇列,一個用於裝置,一個用於驅動。當一個新的裝置加入是,這個裝置結構會鏈進裝置佇列。而當一個驅動加入是,它就會加入驅動佇列。而且,無論是裝置還是驅動,當有插入操作是,它都會遍歷另一個佇列,尋找相應的驅動或裝置,如果找到匹配的, 就會就行drv->device = dev, dev->driver=drv操作,這個某個裝置就和某個驅動關聯了起來。這就是說這個驅動就可以用了。

4.amba-pl011驅動首先會註冊裝置,然後註冊驅動,註冊驅動時會匹配裝置,匹配成功之後會直接呼叫probe配置埠相關資訊,配置完成之後該串口才可以使用,才可以open-》write