結構體 struct device ; 標頭檔案位於linux/include/linux/device.h
用於描述裝置相關的資訊裝置之間的層次關係,以及裝置與匯流排、驅動的關係。
這篇講如何建立裝置device_register(&tdev);結構體
device_unregister(&tdev);
學過了裝置驅動後,就開始看匯流排。之所以電腦可以識別插入的裝置,就是靠匯流排分離和配對裝置及驅動。
這篇文章已經講解了相關的**。當裝置插入時,匯流排會呼叫probe函式,讀其結構體,了解 到底是什麼裝置什麼匹配規則,然後初始化呼叫相對應的驅動。
裝置和驅動的拔出則使用remove函式釋放。
如果裝置註冊時沒有歸類(class)和加入匯流排(bus),不出錯但也沒意義。而驅動在沒有匯流排的情況下不能註冊入核心。
bus_register(&bus_type)
bus_unregister(&bus_type)
乙個類是乙個裝置的高層檢視,它抽象掉了底層的實現細節。它幫助裝置歸類,mdev自動生成裝置檔案於/dev。
struct
class
一樣有註冊登出:
class_register(&cls);
class_unregister(&cls);
struct class_device
呼叫函式:註冊登出
int class_device_register(struct class_device *class_dev);
void class_device_unregister(struct class_device *class_dev);
不易分類的可以分到雜裝置:miscdevice
/include/linux/ioport.h
struct resource ;
struct resource_list ;
resource->start描述裝置實體在cpu匯流排上的線性起始實體地址;
resource->end -描述裝置實體在cpu匯流排上的線性結尾實體地址;
resource->name 描述這個裝置實體的名稱,這個名字開發人員可以隨意起,但最好貼切;
resource->flag 描述這個裝置實體的一些共性和特性的標誌位;
沒有對應的結構體需要自己封裝。
struct my_device
struct device
....
匯流排 裝置和驅動
一 匯流排 linux中,使用struct bus type表示一條匯流排,該結構定義在linux device.h中,先只看其中的兩個字段,name表示匯流排的名字,比如usb i2c spi等,match方法用於匹配新增到該匯流排上的裝置和驅動,如果匹配成功,則呼叫驅動中的probe函式。註冊一...
匯流排 裝置 驅動模型
裝置元素 匯流排,驅動,裝置 匯流排 處理器和裝置之間的通道,在裝置模型中,所有的裝置都通過匯流排相連,甚至是內部的虛擬 platform 匯流排 定時器,看門狗並沒有直接相連 在linux裝置模型中,匯流排由bus type結構表示,定義在 匯流排的註冊使用 bus register struct...
匯流排裝置驅動模型
匯流排裝置驅動模型 匯流排是主機和裝置之間的通道,由bus type 結構描述。int bus register struct bus type bus 匯流排的註冊,若成功,新的匯流排將被新增進系統,並可在 sysfs 的 sys bus 下看到。void bus unregister struc...