匯流排:乙個匯流排是處理器和乙個或多個裝置之間的通道。為裝置模型的目的,所有的裝置都通過乙個匯流排連線,甚至當它是乙個內部的虛擬的「平台」匯流排。
裝置:裝置就是連線在匯流排上的物理實體。裝置是有功能之分的。具有相同功能的裝置被歸到乙個類(class)中。在linux 系統中,每個裝置由乙個 struct device 代表。
驅動:驅動程式是在cpu執行時,提供操作的軟體介面。裝置模型跟蹤所有對系統已知的驅動。這個跟蹤的主要原因是使驅動核心能匹配驅動和新裝置。
bus_type、device_driver、device這三個核心結構在核心**中可以找到。不管是裝置還是驅動,都是掛接在某條匯流排上的,也就是說根據匯流排型別的不同來區分各種裝置和驅動。乙個裝置和驅動可以掛接在不同的匯流排上,比如網絡卡可以掛接在pci和sdio匯流排上,但這並不是說在linux裝置模型中就可以同時掛接在兩個匯流排上,只能選擇其中的一種掛接。注意在device
結構中存在乙個
struct device_driver *driver
的宣告,而在
device_drive
中卻並沒有同樣的包含
device
結構。這說明,
對於乙個裝置來說,只能繫結乙個驅動;而對於乙個驅動來說,是可以對應於多個裝置的。
匯流排註冊時,呼叫bus_register,該匯流排建立並新增裝置devices鍊錶和驅動drivers鍊錶。
裝置註冊時(裝置被插入),呼叫device_register,分配乙個device結構dev,將dev掛入bus的devices鍊錶中,從bus的drv鍊錶取出每乙個drv,用匯流排的match函式來判斷能否支援dev。
驅動註冊時(.ko模組被載入),呼叫driver_register,分配乙個device_driver結構drv,將drv掛入bus的drivers鍊錶中,,從bus的dev鍊錶取出每乙個dev,用匯流排的match函式來判斷能否支援drv。
將所有裝置和驅動掛接在匯流排上,僅僅表明了驅動、裝置與匯流排的關係,並不能表明裝置和驅動之間的關係。匯流排的match函式負責匹配驅動與裝置,該函式通常判斷如果driver有id表,就查表匹配,如果沒有就用driver和device名字匹配。當匹配成功後如果自動初始化標誌允許則呼叫初始化函式probe,bus的probe優先順序始終高於driver的。解除安裝驅動或裝置的時候後呼叫release函式。
匯流排 裝置 驅動模型
裝置元素 匯流排,驅動,裝置 匯流排 處理器和裝置之間的通道,在裝置模型中,所有的裝置都通過匯流排相連,甚至是內部的虛擬 platform 匯流排 定時器,看門狗並沒有直接相連 在linux裝置模型中,匯流排由bus type結構表示,定義在 匯流排的註冊使用 bus register struct...
匯流排裝置驅動模型
匯流排裝置驅動模型 匯流排是主機和裝置之間的通道,由bus type 結構描述。int bus register struct bus type bus 匯流排的註冊,若成功,新的匯流排將被新增進系統,並可在 sysfs 的 sys bus 下看到。void bus unregister struc...
匯流排裝置驅動模型
1.匯流排裝置模型概述 2.匯流排 3.驅動 4.裝置 1.匯流排裝置模型概述 隨著技術的不斷進步,系統的拓撲結構也越來越複雜,對熱插拔,跨平台移植性的要求也越來越高,2.4核心已經難以滿足這些需求。為適應這種形勢的需要,從linux2.6核心開始提供了全新的裝置模型。匯流排裝置驅動對熱插拔要求越來...