Linux中匯流排 裝置 驅動是如何關聯的?

2021-08-11 08:20:22 字數 1623 閱讀 1583

對於linux驅動開發來說,裝置模型的理解是根本,顧名思義裝置模型是關於裝置的模型,裝置的概念就是匯流排和與其相連的各種裝置了。

電腦城的it 工作者都會知道裝置是通過匯流排連到計算機上的,而且還需要對應的驅動才能用,可是匯流排是如何發現裝置的,裝置又是如何和驅動對應起來的?

匯流排、裝置、驅動,也就是bus、device、driver

,在核心裡都會有它們自己專屬的結構,在include/linux/device.h 裡定義。

首先是匯流排,

bus_type.

struct bus_type ;

下面是裝置device的定義:

struct device ;

下面是裝置驅動定義:

struct device_driver ;

我們會發現,structbus_type中有成員structksetdrivers 和structksetdevices,同時structdevice中有兩個成員struct bus_type * bus

和struct device_driver *driver ,structdevice_driver

中有兩個成員structbus_type*bus和structklistklist_devices。structdevice中的bus表示這個裝置連到哪個匯流排上,driver表示這個裝置的驅動是什麼,structdevice_driver中的bus表示這個驅動屬於哪個匯流排,klist_devices表示這個驅動都支援哪些裝置,因為這裡device是複數,又是list,更因為乙個驅動可以支援多個裝置,而乙個裝置只能繫結乙個驅動。當然,structbus_type中的drivers和devices分別表示了這個匯流排擁有哪些裝置和哪些驅動。

還有上面device 和driver結構裡出現的kobject 結構是什麼?kobject 和kset 都是linux 裝置模型中最基本的元素。一般來說應該這麼理解,整個linux 的裝置模型是乙個oo 的體系結構,匯流排、裝置和驅動都是其中鮮活存在的物件,kobject 是它們的基類,所實現的只是一些公共的介面,kset 是同種型別kobject 物件的集合,也可以說是物件的容器。

那麼匯流排、裝置和驅動之間是如何關聯的呢?

先說說匯流排中的那兩條鍊錶是怎麼形成的。核心要求每次出現乙個裝置就要向匯流排匯報,或者說註冊,每次出現乙個驅動,也要向匯流排匯報,或者說註冊。比如系統初始化的時候,會掃瞄連線了哪些裝置,並為每乙個裝置建立起乙個structdevice 的變數,每一次有乙個驅動程式,就要準備乙個tructdevice_driver 結構的變數。把這些變數統統加入相應的鍊錶,device 插入devices 鍊錶,driver 插入drivers 鍊錶。這樣通過匯流排就能找到每乙個裝置,每乙個驅動。

裝置和驅動又是如何聯絡?

但現在情況變了,出現了一種新的名詞,叫熱插拔。裝置可以在計算機啟動以後在插入或者拔出計算機了。裝置可以在任何時刻出現,而驅動也可以在任何時刻被載入,所以,出現的情況就是,每當乙個structdevice 誕生,它就會去bus 的drivers鍊錶中尋找自己的另一半,反之,每當乙個struct device_driver 誕生,它就去bus的devices 鍊錶中尋找它的那些裝置。如果找到了合適的,那麼ok,和之前那種情況一下,調device_bind_driver 繫結好。如果找不到,沒有關係,等待吧!

Linux匯流排裝置驅動

註冊裝置使用的結構體platform device,該結構體在標頭檔案 include linux platform device.h 中,結構體成員如下 在平台檔案中 linux的arm平台 在arch arm中 定義結構體並把結構體加入到乙個platform device型別的指標陣列中,系統會...

linux匯流排,裝置,驅動註冊

遵守udev裝置模型,首先註冊匯流排,然後是匯流排裝置,之後是具體裝置註冊,註冊完之後就可以在sys bus相應的目錄下面找到掛載這個匯流排上的裝置,最後是註冊驅動,驅動會查詢匯流排上的裝置進行繫結。比如 自定義乙個裝置是my vir device,使用匯流排是vir bus。1.註冊匯流排型別 s...

Linux的匯流排裝置驅動模型

在linux中,一開始bus下的device有乙個device鍊錶,driver也有乙個鍊錶,當註冊platform device的時候,會把新的platform device結構體放入device鍊錶,然後從driver的鍊錶中把已有的driver乙個乙個地取出來跟platform device結...