裝置標識及驅動程式所支援的裝置(

2021-06-19 19:22:39 字數 1713 閱讀 8437

2. 

驅動程式所支援的裝置

在驅動程式的編寫過程中,如果此程式被用來作為硬體裝置的驅動,那麼應該首先確定裝置標識。

2.1 pci裝置

可以使用兩個輔助巨集來進行

struct pci_device_id

結構體的初始化:

pci_device(vendor, device)

創ㄒ桓黿齪吞囟ǔ 碳吧璞?/span>id

相匹配的

struct pci_device_id

。pci_device_class(device_class, device_class_mask)

建立乙個和特定

pci類相匹配的

struct pci_device_id。

struct pci_device_id

結構體需要被匯出到使用者空間,使熱插拔和模組裝載系統知道什麼模組針對什

麼硬體裝置。巨集

module_device_table

完成這個工作。

module_device_table(pci, var_name)

該巨集建立乙個名為

__mod_pci_device_table

的區域性變數,指向

struct 

pci_device_id

陣列。在稍後的核心

構建過程中,

depmod

程式在所有的模組中搜尋符號

__mod_pci_device_table

。如果找到了該符號,它

把資料從該模組中抽出,新增到檔案

/lib/modules/kernel_version/modules.pcimap

中。當depmod

結束之後,核心模組支援的所有

pci裝置連同它們的模組名都在該檔案中被列出。當核心告知熱插拔系

統一個新的

pci裝置已經被發現時,熱插拔系統使用

modules.pcimap

檔案來尋找要裝載的恰當的驅動程

序。 2.2 

usb裝置

對於usb

裝置,可以使用下面巨集進行

struct usb_device_id

結構體的初始化:

usb_device(vendor, product)

建立乙個

struct usb_device_id

結構體,僅和指定的製造商和產品

id值相匹配。

usb_device_info(class, subclass, protocol)

建立乙個

struct usb_device_id

結構體,僅和

usb裝置的指定型別相匹配

例如:

static struct usb_device_id usb_example = ,

};module_device_table(usb, usb_example);

通過module_device_table

巨集,使用者空間的熱插拔和模組裝載系統知道什麼驅動模組針對什

麼硬體裝置。

裝置標識及驅動程式所支援的裝置(

2.驅動程式所支援的裝置 在驅動程式的編寫過程中,如果此程式被用來作為硬體裝置的驅動,那麼應該首先確定裝置標識。2.1 pci裝置 可以使用兩個輔助巨集來進行 struct pci device id 結構體的初始化 pci device vendor,device 創 桓黿齪吞囟 碳吧璞?span...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...