新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 獲取PCI總線上任何配置頭信息

獲取PCI總線上任何配置頭信息

作者: 時(shí)間:2016-12-15 來(lái)源:網(wǎng)絡(luò) 收藏
原創(chuàng)來(lái)自于《windows驅(qū)動(dòng)開(kāi)發(fā)技術(shù)詳解》。PCI由設(shè)備存儲(chǔ)信息,I/O地址空間和接下來(lái)要著重顯示的配置空間。前兩者可以通過(guò)配置空間的Base Address Register[]獲取。(之后的博文都采用WDM分層驅(qū)動(dòng)結(jié)構(gòu),如果之后學(xué)習(xí)了WDF結(jié)構(gòu),那全部改用最新的驅(qū)動(dòng)結(jié)構(gòu),這樣可以讓驅(qū)動(dòng)在 win7或更高系統(tǒng)上運(yùn)行。)
書(shū)上用的是傳到驅(qū)動(dòng)層,然后在操作端口,獲取的數(shù)據(jù)在應(yīng)用層顯示。不過(guò)這種方法不是很喜歡,比較喜歡在驅(qū)動(dòng)層開(kāi)啟I/O位圖位,然后讓?xiě)?yīng)用層擁有端口操作權(quán)限。所以,在看本博文之前,請(qǐng)先熟悉之前的關(guān)于在應(yīng)用層開(kāi)啟端口操作權(quán)限的相關(guān)函數(shù)講解的博文,寫(xiě)好一個(gè)驅(qū)動(dòng),能開(kāi)啟端口讀取權(quán)限。然后再繼續(xù)閱讀本文。
以下是類(lèi)型0的PCI配置結(jié)構(gòu):

如果看不懂,那需要回去復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)哦。這個(gè)圖很簡(jiǎn)單,總共256個(gè)字節(jié)。自己可以寫(xiě)一個(gè)結(jié)構(gòu)去接受這個(gè)數(shù)據(jù),但是書(shū)上給了現(xiàn)成的,我也就偷偷懶,注釋了1一個(gè)重要的地方(40h-FFh)。下面來(lái)看看書(shū)上結(jié)構(gòu)的巧妙之處。下面三個(gè)常量,便是3種類(lèi)型中基地址數(shù)組大小。(下面結(jié)構(gòu)是一起的,只是分了幾張圖發(fā),方便講解)
類(lèi)型0配置頭不同的地方
類(lèi)型1配置頭不同的地方

類(lèi)型2配置頭的不同

這里充分說(shuō)明union聯(lián)合聲明的好用。
書(shū)上定義了一個(gè)_PCI_SLOT_NUMBER結(jié)構(gòu)位結(jié)構(gòu),但是沒(méi)定義完,還要自己進(jìn)行位操作。為了方便,我直接把這個(gè)結(jié)構(gòu)完善了,每次填寫(xiě)就可以了。
上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: PCI總線配置頭信

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉