1. 程式人生 > >裝置、驅動、匯流排的關係

裝置、驅動、匯流排的關係

我們編寫的裝置驅動程式,一定是先屬於一個匯流排的驅動,比如屬於USB匯流排,或者屬於PCI匯流排,或者屬於I2C匯流排,等等,因為我們編寫的裝置驅動,在註冊,安裝到系統時,系統會先檢查驅動是屬於哪個匯流排的(裝置驅動編寫時已經定義好),會把驅動加入到對應的匯流排的kset中,即把當前裝置驅動的kobject加入到對應匯流排的kset中,形成層次關聯。而當系統檢測到有裝置存在(硬體),也會先判斷裝置是屬於哪個匯流排的(硬體連線),然後遍歷當前匯流排下的所有裝置驅動程式,通過所屬匯流排的探測函式,查詢是否有裝置驅動程式匹配可以驅動當前的裝置(一般是通過獲得裝置的PID,VID,跟驅動程式的PID,VID比較,看是否匹配而定),如果有驅動程式可以驅動裝置,則把當前裝置也加入到所屬匯流排的kset中,如果沒有可驅動裝置的驅動程式,則只能在匯流排的裝置連結串列中存在,而如果裝置都無法通過匯流排的匹配,則也沒有辦法存在於匯流排的裝置連結串列中。由於一條匯流排要管理總線上的所有驅動,同時要管理總線上的有所裝置,則需要再把所有裝置和所有驅動都分開,分別設立一個裝置kset和一個裝置驅動kset,用於管理所有的裝置和裝置驅動,如此,則匯流排kset實際上包含了兩個kset(裝置kset,裝置驅動kset),裝置kset又包含了所有的當前匯流排的裝置的kobject,裝置驅動kset包含了所有的當前匯流排的裝置驅動的kobject;而所有的匯流排,又形成了bus的kset,歸結起來就形成下圖的層次關係: