bus,device,driver三者關係

2021-05-21 13:05:38 字數 1227 閱讀 6474

bus,device,driver三者關係

bus:

匯流排作為主機和外設的連線通道,有些匯流排是比較規範的,形成了很多協議。如pci,usb,1394,iic等。任何裝置都可以選擇合適的匯流排連線到主機。當然主機也可能就是cpu本身。記憶體也是通過bus連線到主機的,可記憶體使用的匯流排不是外設匯流排,因此和記憶體使用相同型別的匯流排的裝置,談及bus比較含糊。

一塊網絡卡在嵌入式開發中,直接通過記憶體匯流排接入到cpu。我們在寫網絡卡驅動時,要給該bus定義就麻煩了。

driver:

驅動程式是在cpu執行時,提供操作的軟體介面。所有的裝置必須有與之配套驅動程式才能正常工作。乙個驅動程式可以驅動多個類似或者完全不同的裝置。

device:

裝置就是連線在匯流排上的物理實體。裝置是有功能之分的。具有相同功能的裝置被歸到乙個類(class中)。如音訊裝置(和聲音相關的都算),輸入裝置(滑鼠,鍵盤,遊戲杆等)。。。。

從巨集觀考慮,任何裝置必須要連線到主機才能發揮其作用。乙個滑鼠離開了電腦主機就不再是滑鼠了。提到了連線就必然出現匯流排bus。任何裝置要正常執行必須有軟體支援,所有的裝置必須有driver。裝置的目的就是完成功能,根據功能的分類,該裝置必然屬於某個class。

1.三者的定義在 include/linux/device.h裡。

2.匯流排中的那兩條鍊錶是怎麼形成:

這要求每次出現乙個裝置就要向匯流排匯報,或者說註冊,每次出現乙個驅動,也要向匯流排匯報,或者說註冊。比如系統初始化的時候,會掃瞄連線了哪些裝置,並為每乙個裝置建立起乙個struct device的變數,每一次有乙個驅動程式,就要準備乙個struct device_driver結構的變數。把這些變數統統加入相應的鍊錶,device 插入devices 鍊錶,driver插入drivers鍊錶。這樣通過匯流排就能找到每乙個裝置,每乙個驅動.然而,假如計算機裡只有裝置卻沒有對應的驅動,那麼裝置無法工作。反過來,倘若只有驅動卻沒有裝置,驅動也起不了任何作用。

4.熱插拔:

device可以在計算機啟動以後在插入或者拔出計算機了。因此,很難再說是先有 device還是先有driver了。因為都有可能。device可以在任何時刻出現,而driver 也可以在任何時刻被載入,所以,出現的情況就是,每當乙個struct device誕生,它就會去bus的drivers鍊錶中尋找自己的另一半,反之,每當乙個乙個struct device_driver誕生,它就去bus的devices鍊錶中尋找它的那些裝置。如果找到了合適的,那麼ok,和之前那種情況一下,呼叫 device_bind_driver繫結好.

bus,device,driver三者關係

bus 匯流排作為主機和外設的連線通道,有些匯流排是比較規範的,形成了很多協議。如pci,usb,1394,iic等。任何裝置都可以選擇合適的匯流排連線到主機。當然主機也可能就是cpu本身。記憶體也是通過bus連線到主機的,可記憶體使用的匯流排不是外設匯流排,因此和記憶體使用相同型別的匯流排的裝置,...

bus,device,driver三者關係

bus,device,driver三者關係 bus 匯流排作為主機和外設的連線通道,有些匯流排是比較規範的,形成了很多協議。如pci,usb,1394,iic等。任何裝置都可以選擇合適的匯流排連線到主機。當然主機也可能就是cpu本身。記憶體也是通過bus連線到主機的,可記憶體使用的匯流排不是外設匯流...

KVM Qemu Libvirt三者之間的關係

原始出處 作者資訊和本宣告。否則將追究法律責任。qemu qemu 是乙個模擬器,它向 guest os 模擬cpu 和其他硬體,guest os 認為自己和硬體直接打交道,其實是同 qemu 模擬出來的硬體打交道,qemu 將這些指令轉譯給真正的硬體。由於所有的指令都要從 qemu 裡面過一手,因...