《Linux那些事兒之我是USB》我是隨身碟(7)狂歡是一群人的孤單

來源:互聯網
上載者:User

Linux 裝置模型中三個很重要的概念就是匯流排、裝置和驅動,即 bus 、 device 和 driver 。而實際上核心中也定義了這麼一些資料結構,他們是 struct bus_type , struct device , struct device_driver ,這三個重要的資料結構都來自同一個地方,稱 include/linux/device.h 。

我們知道匯流排有很多種,如 PCI 匯流排、 SCSI 匯流排、 USB 匯流排,所以我們會看到 Linux 核心代碼中出現pci_bus_type , scsi_bus_type , usb_bus_type ,它們都是 struct bus_type 類型的變數。而 struct bus_type結構中兩個非常重要的成員就是 struct kset drivers 和 struct kset devices 。 kset 和另一個叫做 kobject 正是 2.6核心中裝置模型的基本元素。

這裡我們只需要知道, drivers 和 devices 的存在,讓 struct bus_type 與兩個鏈表聯絡了起來,一個是 devices的鏈表,一個是 drivers 的鏈表。也就是說,知道一條匯流排所對應的資料結構,就可以找到這條匯流排所關聯的裝置,及支援這類裝置的驅動程式。

而要實現這些目的,就要求每次出現一個裝置就要向匯流排彙報,或者說註冊。每次出現一個驅動,也要向匯流排彙報,或者註冊。比如系統初始化 時 ,會掃描串連了哪些裝置,並為每一個裝置建立起一個 struct device 的變數,每一次有一個驅動程式,就要準備一個 struct device_driver 結構的變數。把這些變數統統加入相應的鏈表,裝置 插入 devices 鏈表, 驅動 插入 drivers 鏈表。 這樣通過匯流排就能找到每一個裝置,每一個驅動。

然而,假如電腦裡只有裝置卻沒有對應的驅動,那麼裝置無法工作。反過來,倘若只有驅動卻沒有裝置,驅動也起不了任何作用。 裝置 開始多了, 驅動 開始多了,它們像是兩個來自世界, 裝置 們彼此取暖, 驅動 們一起狂歡,但它們有一點是相同的,都只是在等待屬於自己的那個另一半。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.