linux下PCI裝置驅動程式之註冊詳解

2021-06-20 14:32:30 字數 955 閱讀 7033

一 識別方式:

**為了方便每個人的管理,搞了一套身份識別的玩意(檔案和身份證)。kernel本省就像乙個社會,每個進來的裝置必須要有它獨特的名字和一些檔案。

這個工作對pci來說,它是由pci_device_id這個結構體來進行身份資訊儲存的:

17 struct pci_device_id ;

針對一些英文不好的同學,還是有必要對上面的資訊進行翻譯一下。vendor,device 分別代表裝置商給的裝置編號(身份證號)和該裝置的名字(姓名)

subverdor,subdevice 分別對應的是該裝置是否有別名,絕大多數裝置是不需要的。class,class_mask分別對應的是該pci裝置屬於哪個裝置:比如說,屬於網路,塊裝置。

driver_data是屬於該裝置的私有資料,每個裝置都不一樣。

二 pci裝置註冊和解註冊:

人有生老病死,同樣,每個驅動也有他們的宿命:出生->生活->死亡(任何中形式)這裡,我就介紹一下pci裝置是怎麼誕生,怎麼死亡的。

誕生:需要註冊函式:pci_register_driver 該函式在android4.2核心中的路徑是:kernel/drivers/pci/pci-driver.c

該函式的定義:

int __pci_register_driver(struct pci_driver *drv, struct module *owner,

1106 const char *mod_name)

1107

死亡:裝置的死亡就意味著是解註冊,這裡面要做的是刪除註冊過的檔案裝置,刪除驅動,把該裝置從鍊錶中刪除等操作。

1151 void

1152 pci_unregister_driver(struct pci_driver *drv)

1153

PCI驅動程式實現(linux)

1.關鍵資料結構 pci 裝置上有三種位址空間 pci的i o空間 pci的儲存空間和pci的配置空間。cpu可以訪問pci裝置上的所有位址空間,其中i o空間和儲存空間提供給裝置驅動程式使用,而配置空間則由linux核心中的pci初始化 使用。核心在啟動時負責對所有pci裝置進行初始化,配置好所有...

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...