版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、PCI設(shè)備驅(qū)動(dòng)知識點(diǎn)分類:linux編程2010123116:55132人閱讀評論(0)收藏舉報(bào)申明:此文章并非本人所寫,只是加以修改和備注原帖請看::hi.linux_kernelblogcategypci%C9%E8%B1%B8%C7%FD%B6%AF那位大大可是個(gè)大牛人,上面有不少好東東!一、PCI簡介PCI是一種外設(shè)總線規(guī)范。我們先來看一下什么是總線:總線是一種傳輸信號的路徑或信道。典型情況是,總線是連接于一個(gè)或多個(gè)導(dǎo)體的電氣連
2、線,總線上連接的所有設(shè)備可在同一時(shí)間收到所有的傳輸內(nèi)容。總線由電氣接口和編程接口組成。本文討論Linux下的設(shè)備驅(qū)動(dòng),所以,重點(diǎn)關(guān)注編程接口。PCI是PeripheralComponentInterconnect(外圍設(shè)備互聯(lián))的簡稱,是普遍使用在桌面及更大型的計(jì)算機(jī)上的外設(shè)總線。PCI架構(gòu)被設(shè)計(jì)為ISA標(biāo)準(zhǔn)的替代品,他有三個(gè)主要目標(biāo):獲得在計(jì)算機(jī)和外設(shè)之間傳輸數(shù)據(jù)時(shí)更好的性能;盡可能的平臺無關(guān);簡化往系統(tǒng)中添加和刪除外設(shè)的工作。二、P
3、CI尋址從目前開始,我想盡可能通過一些實(shí)際的例子來說明問題,而減少理論方面的問題的描述,因?yàn)椋嚓P(guān)的理論的東西,能在其他地方找到。我們先來看一個(gè)例子,我的計(jì)算機(jī)裝有1G的RAM,1G以后的物理內(nèi)存地址空間都是外部設(shè)備IO在系統(tǒng)內(nèi)存地址空間上的映射。prociomem描述了系統(tǒng)中所有的設(shè)備IO在內(nèi)存地址空間上的映射。我們來看地址從1G開始的第一個(gè)設(shè)備在prociomem中是怎么描述的:40000000400003ff:0000:00:1f
4、.1這是個(gè)PCI設(shè)備,40000000400003ff是他所映射的內(nèi)存地址空間,占據(jù)了內(nèi)存地址空間的1024bytes的位置,而0000:00:1f.1則是個(gè)PCI外設(shè)的地址以冒號和逗號分隔為4個(gè)部分:第一個(gè)16位表示域;第二個(gè)8位表示一個(gè)總線編號,2^8256,故每個(gè)域最多能有256個(gè)總線;第三個(gè)5位表示一個(gè)設(shè)備號,每個(gè)總線最多能掛載32個(gè)設(shè)備;最后是3位,表示功能號,每個(gè)設(shè)備最多能有8種功能,也就是最多能夠?qū)?yīng)8個(gè)邏輯設(shè)備,每種功能
5、都唯一的對應(yīng)一個(gè)pci_dev結(jié)構(gòu)體。注:因?yàn)镻CI規(guī)范允許單個(gè)系統(tǒng)擁有高達(dá)256個(gè)總線,但對于大型系統(tǒng)而言,這是不夠的,所以,引入了域的概念。由此,我們能得出上述的PCI設(shè)備的地址是0號域0號總線上的31號設(shè)備上的1號功能。那上述的這個(gè)PCI設(shè)備到底是什么呢?下面是我的計(jì)算機(jī)上的lspci命令的輸出:00:00.0Hostbridge:IntelCpation82845845(Brookdale)ChipsetHostBridge(r
6、ev04)00:01.0PCIbridge:IntelCpation82845845(Brookdale)ChipsetAGPBridge(rev04)00:1d.0USBController:IntelCpation82801CACAMUSB(Hub#1)(rev02)00:1d.1USBController:IntelCpation82801CACAMUSB(Hub#2)(rev02)00:1e.0PCIbridge:IntelCp
7、ation82801MobilePCIBridge(rev42)00:1f.0ISAbridge:IntelCpation82801CAMISABridge(LPC)(rev02)00:1f.1IDEinterface:IntelCpation82801CAMIDEU100(rev02)prociopt中得到驗(yàn)證。為了能看到實(shí)際的運(yùn)行效果,我們選擇8139too網(wǎng)卡作為示例從該網(wǎng)卡的linux驅(qū)動(dòng)程式中裁剪相關(guān)代碼。一個(gè)PCI設(shè)備的驅(qū)動(dòng)
8、程式必須要向內(nèi)核中的PCI核心描述自己。同時(shí),他也必須告訴PCI核心自己能夠驅(qū)動(dòng)哪些設(shè)備。下面,就介紹兩個(gè)相關(guān)的重要數(shù)據(jù)結(jié)構(gòu)。用于定義該驅(qū)動(dòng)程序支持的不同類型的PCI設(shè)備列表structpci_device_id__u32vend__u32device指定設(shè)備的PCI廠商和設(shè)備ID,如驅(qū)動(dòng)程序可以處理任何廠商或設(shè)備ID,可使用值PCI_ANY_ID__u32subvend__u32subdevice指定設(shè)備的PCI子系統(tǒng)廠商和設(shè)備ID,
9、如驅(qū)動(dòng)程序可處理任何子系統(tǒng)廠商或設(shè)備ID,可使用PCI_ANY_ID__u32class__u32class_mask可使驅(qū)動(dòng)程序指定一種PCI類(class)設(shè)備,如果可以處理任何類型,則使用PCI_ANY_IDkernel_ulong_tdriver_data如果需要,則用來保存PCI驅(qū)動(dòng)程序用于區(qū)分不同設(shè)備的信息用于向PCI核心描述PCI驅(qū)動(dòng)程序structpci_driverstructlist_headnodename在內(nèi)核的
10、所有PCI驅(qū)動(dòng)程序的名字必須唯一,通常設(shè)置為和驅(qū)動(dòng)程序模塊名相同的名字structmoduleownerconststructpci_device_idid_table驅(qū)動(dòng)所能操縱的設(shè)備id列表。int(probe)(structpci_devdevconststructpci_device_idid)指向PCI驅(qū)動(dòng)程序中的探測函數(shù),用于插入新設(shè)備void(remove)(structpci_devdev)移除設(shè)備int(suspend
11、)(structpci_devdevpm_message_tstate)指向掛起函數(shù),掛起狀態(tài)以state傳遞,該函數(shù)可選int(resume)(structpci_devdev)指向恢復(fù)函數(shù),總是在被掛起之后調(diào)用,該函數(shù)也可選int(enable_wake)(structpci_devdevpci_power_tstateintenable)使能喚事件void(shutdown)(structpci_devdev)structdevi
12、ce_driverdriverstructpci_dynidsdynidspci_device_id唯一標(biāo)識一個(gè)PCI設(shè)備。他的幾個(gè)成員依次分別表示:廠商號、設(shè)備號、子廠商號、子設(shè)備號、類別、類別掩碼(類可分為基類、子類)、私有數(shù)據(jù)。每一個(gè)PCI設(shè)備的驅(qū)動(dòng)程式都有一個(gè)pci_device_id的數(shù)組,用于告訴PCI核心自己能夠驅(qū)動(dòng)哪些設(shè)備。8139too的驅(qū)動(dòng)程式定義他的pci_device_id數(shù)組如下:staticstructpci
13、_device_idrtl8139_pci_tbl[]該數(shù)組被初始化為8139系列的一組網(wǎng)卡,當(dāng)PCI核心得到這個(gè)數(shù)組后,會拿數(shù)組中的每一項(xiàng)跟從PCI設(shè)置空間中讀取到的數(shù)據(jù)進(jìn)行比對,從而為該驅(qū)動(dòng)程式找到正確的設(shè)備。而pci_driver代表一個(gè)pci驅(qū)動(dòng)程序。成員id_talbe即是指向pci_device_id數(shù)組的指針。name是驅(qū)動(dòng)程序的名字,probe完成探測工作,即拿pci_device_id數(shù)組和內(nèi)核中的數(shù)據(jù)進(jìn)行比對。rem
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- pci設(shè)備pci設(shè)備pci設(shè)備
- PXI-PCI總線設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)及應(yīng)用.pdf
- PCI總線接口板及其WDM驅(qū)動(dòng)程序開發(fā).pdf
- 基于PCI總線的嵌入式設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)與研究.pdf
- 基于PCI總線的主設(shè)備功能仿真與驗(yàn)證.pdf
- PCI總線主設(shè)備控制器的FPGA實(shí)現(xiàn).pdf
- 基于PCI總線的驅(qū)動(dòng)程序設(shè)計(jì)及實(shí)現(xiàn).pdf
- Linux下基于PCI總線的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的研究與開發(fā).pdf
- ddk開發(fā)pci設(shè)備驅(qū)動(dòng)程序文獻(xiàn)綜述
- 基于PCI總線的ISA-PCI轉(zhuǎn)接卡的開發(fā).pdf
- PCI設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)與應(yīng)用.pdf
- 基于PCI總線的嵌入式Linux設(shè)備驅(qū)動(dòng)程序的研究與實(shí)現(xiàn).pdf
- pcxt總線isa總線mca總線eisa總線vesa總線pci總線-piazza
- 基于PCI總線PCM解碼設(shè)計(jì).pdf
- 基于FPGA的PCI總線實(shí)現(xiàn).pdf
- 用于CT式安檢設(shè)備的PCI總線傳輸平臺設(shè)計(jì).pdf
- 基于PCI總線的微機(jī)接口技術(shù)實(shí)驗(yàn)設(shè)備研制.pdf
- PCI總線接口芯片的設(shè)計(jì).pdf
- 基于EDKII的PCI總線驅(qū)動(dòng)管理技術(shù)的設(shè)計(jì)與開發(fā).pdf
- 基于PCI總線的視頻檢測卡驅(qū)動(dòng)程序設(shè)計(jì).pdf
評論
0/150
提交評論