當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]PCI設(shè)備Windows通用驅(qū)動(dòng)軌范設(shè)計(jì)

我們開(kāi)發(fā)了一套通用的PCI設(shè)備驅(qū)動(dòng)軌范,它可以完成一般PCI設(shè)備驅(qū)動(dòng)所需的功能,可以作為其它PCI設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的框架。

  1 驅(qū)動(dòng)軌范的模式和開(kāi)發(fā)工具的選擇

  設(shè)備驅(qū)動(dòng)軌范是指打點(diǎn)某個(gè)外圍設(shè)備的一段代碼。驅(qū)動(dòng)軌范不會(huì)獨(dú)登時(shí)存在,而是操作系統(tǒng)的一部門(mén)。經(jīng)由過(guò)程設(shè)備驅(qū)動(dòng)軌范,多個(gè)歷程可以同時(shí)使用這些資本,從而可以實(shí)現(xiàn)多歷程并走運(yùn)行。不才文中,將挪用設(shè)備驅(qū)動(dòng)軌范的PC機(jī)軌范稱為用戶軌范。

  Windows 95和Windows NT采用的驅(qū)動(dòng)軌范系統(tǒng)分歧,所以年夜年夜都情形下驅(qū)動(dòng)軌范也不能通用。若是設(shè)備需要在Windows 9x/NT下使用,一般至少要設(shè)計(jì)Windows 9x和Windows NT兩個(gè)驅(qū)動(dòng)軌范版本。Windows 98 可以兼容Windows 95的驅(qū)動(dòng)軌范,同時(shí)它又推出一個(gè)新的Win32 Drivers Mode(WDM)驅(qū)動(dòng)類型。Windows 98中有些設(shè)備(如USB設(shè)備)的驅(qū)動(dòng)軌范必需為WDM模式。這個(gè)新的類型現(xiàn)實(shí)是在Windows NT的驅(qū)動(dòng)模子的基本上增添了即插即用等內(nèi)容。WDM驅(qū)動(dòng)也可以用在Windows 2000(先前叫Windows NT 5.0)中。從久遠(yuǎn)的角度看。此后開(kāi)發(fā)人員只要開(kāi)發(fā)WDM驅(qū)動(dòng)就可以了,但從今朝的市場(chǎng)情形來(lái)看,Windows 95是無(wú)法拋卻的,所以WDM在近一兩年還無(wú)法替代其它類型的設(shè)備驅(qū)動(dòng)。

  Intel 80386以上的微措置器有4個(gè)優(yōu)先級(jí)別:0級(jí)、1級(jí)、2級(jí)和3級(jí),一般操作系統(tǒng)運(yùn)行于優(yōu)先級(jí)0級(jí)上,而用戶軌范運(yùn)行在3級(jí)上,在對(duì)硬件操作上有一些限制(具體的限制在分歧的操作系統(tǒng)中是分歧的)。Windows 95撐持的驅(qū)動(dòng)類型良多,但針對(duì)一般硬件設(shè)備而言,主若是VxD和打印機(jī)驅(qū)動(dòng)兩類。VxD指的是Virtual Device Drivers。VxD運(yùn)行在Intel系統(tǒng)的0級(jí)上,可以執(zhí)行特權(quán)級(jí)指令,對(duì)任何I/O設(shè)備有全數(shù)訪謁權(quán),所以年夜年夜都硬件驅(qū)動(dòng)軌范都是VxD。VxD驅(qū)動(dòng)凡是以.vxd為擴(kuò)展名,放在WindowsSystem目錄下,可以在Windows 95啟動(dòng)時(shí)裝入,也可以在軌范運(yùn)行時(shí)按照需要?jiǎng)討B(tài)地載入。動(dòng)態(tài)加載有助于節(jié)約系統(tǒng)內(nèi)存和資本。但打印機(jī)驅(qū)動(dòng)軌范不是VxD,它運(yùn)行在3級(jí)上。同Windows 95近似,Windows NT的驅(qū)動(dòng)也有可以運(yùn)行在0級(jí)的內(nèi)核模式(Kernel Mode)和運(yùn)行在3極的用戶模式(User Mode)之分。因?yàn)閃indows NT禁止用戶模式的軌范訪謁I/O端口(Windows 95/98則許可用戶軌范直接訪謁I/O端口),直接節(jié)制物理設(shè)備的驅(qū)動(dòng)軌范都是內(nèi)核模式的。而我們?cè)O(shè)計(jì)的PCI通用驅(qū)動(dòng)軌范要求對(duì)各類硬件資本訪謁,所以應(yīng)該選擇工作在0級(jí)的驅(qū)動(dòng)軌范模式。

  開(kāi)發(fā)設(shè)備驅(qū)動(dòng)采用的首要開(kāi)發(fā)工具是微軟為設(shè)備開(kāi)發(fā)者供給的軟件包Device Driver Kit(DDK)。這個(gè)軟件包搜羅有關(guān)設(shè)備開(kāi)發(fā)的文檔、編譯需要的頭文件和庫(kù)文件、調(diào)試工具和軌范典型。在DDK中還界說(shuō)了一些設(shè)備驅(qū)動(dòng)可以挪用的系統(tǒng)底層處事,象DMA處事、間斷處事、內(nèi)存打點(diǎn)處事、可安裝文件系統(tǒng)處事等等。這些都是編寫(xiě)設(shè)備驅(qū)動(dòng)所必需的。但Windows 95的DDK因?yàn)槭滓褂脜R編說(shuō)話描述。開(kāi)倡議來(lái)斗勁堅(jiān)苦。是以,我們?cè)赪indows 95操作系統(tǒng)中同時(shí)采用了Numega公司的產(chǎn)物VtoolsD。VtoolsD是基于C/C++的,撐持Borland C++和Visual C++,使用和維護(hù)都較Windows 95 DDK輕易。

  2 PCI驅(qū)動(dòng)軌范的特點(diǎn)

  在設(shè)計(jì)驅(qū)動(dòng)軌范之前,首先要對(duì)欲節(jié)制的硬件設(shè)備進(jìn)行詳盡地剖析,更需要具體體味硬件設(shè)備的特征。硬件設(shè)備的特征會(huì)對(duì)驅(qū)動(dòng)軌范設(shè)計(jì)發(fā)生重年夜的影響。需要體味的最首要的硬件特征搜羅:

  (1)設(shè)備的總線結(jié)構(gòu)

  設(shè)備采用什么總線結(jié)構(gòu)很是關(guān)頭,因?yàn)榉制绲目偩€類型(如ISA和PCI)在良多硬件工作機(jī)制上是分歧的,所以驅(qū)動(dòng)軌范設(shè)計(jì)也分歧。

  (2)寄放器

  要體味設(shè)置的節(jié)制寄放器、數(shù)據(jù)寄放器和狀況寄放器,以及這些寄放器工作的特征。

  (3)設(shè)備錯(cuò)誤和狀況

  要體味若何判定設(shè)備的狀況和錯(cuò)誤旌旗燈號(hào),這些旌旗燈號(hào)要經(jīng)由過(guò)程驅(qū)動(dòng)軌范返回給用戶。

  (4)間斷行為

  要體味設(shè)備發(fā)生間斷的前提和使用間斷的數(shù)目。

  (5)數(shù)據(jù)傳輸機(jī)制

  最常見(jiàn)的數(shù)據(jù)傳輸機(jī)制是經(jīng)由過(guò)程I/O端口(port),也就是經(jīng)由過(guò)程CPU的IN/OUT指令進(jìn)行數(shù)據(jù)讀寫(xiě)。PC的另一種主要的傳輸機(jī)制是DMA,但PCI規(guī)范不搜羅隸屬DMA的聲名。

  (6)設(shè)備內(nèi)存

  良多設(shè)備自身帶有內(nèi)存,PCI設(shè)備年夜多是采用映射的體例映射到PC系統(tǒng)的物理內(nèi)存。有的設(shè)備還要經(jīng)由過(guò)程驅(qū)動(dòng)軌范設(shè)置設(shè)備的接口寄放器。

  有關(guān)驅(qū)動(dòng)軌范的加載和響應(yīng)用戶請(qǐng)求的內(nèi)容,在DDK文檔中有劃定,所以設(shè)計(jì)設(shè)備驅(qū)動(dòng)軌范首要的面臨問(wèn)題是若何進(jìn)行硬件操作,這是按照設(shè)備的分歧而分歧的。而硬件驅(qū)動(dòng)軌范的功能雖然千差萬(wàn)別,但根基功能就是完成設(shè)備的初始化、對(duì)端口的讀寫(xiě)操作、間斷的設(shè)置、響應(yīng)和挪用以及對(duì)內(nèi)存的直接讀寫(xiě)。如前面所說(shuō),Windows 9x和Windows NT的操作系統(tǒng)模子分歧,但驅(qū)動(dòng)軌范所要完成的工作卻是不異的,所以下面以Windows 9x為主進(jìn)行介紹,僅在需要的處所指出兩個(gè)操作系統(tǒng)的分歧。下面從這幾方面談判解決這些問(wèn)題的路子#e#下面從這幾方面談判解決這些問(wèn)題的路子:

 

  (1)設(shè)備初始化

  PCI設(shè)備驅(qū)動(dòng)軌范要實(shí)現(xiàn)識(shí)別PCI器件、尋址PCI器件的資本和對(duì)PCI器件間斷的處事。PCI系統(tǒng)BIOS功能供給了BIOS的訪謁與節(jié)制的具體特征,所有軟件(設(shè)備驅(qū)動(dòng)軌范、擴(kuò)展ROM碼)將經(jīng)由過(guò)程尺度間斷號(hào)1AH挪用BIOS功能訪謁非凡部件。PCI BIOS規(guī)范有完整的有關(guān)PCI BIOS功能的描述[3]。

  在PCI設(shè)備驅(qū)動(dòng)軌范的初始化過(guò)程中,操作指定器件識(shí)別號(hào)(device_id)、廠商識(shí)別號(hào)(vendor_id)、檢索號(hào)(index)搜索PCI器件,經(jīng)由過(guò)程挪用PCI BIOS確認(rèn)其存在,并確定其物理位置:總線號(hào)、器件號(hào)和功能號(hào),這是該器件/功能在系統(tǒng)中的獨(dú)一尋址標(biāo)識(shí)表記標(biāo)幟。操作總線號(hào)、器件號(hào)和功能號(hào)可以尋址該器件/功能的PCI設(shè)置裝備擺設(shè)空間(configuration space)。

  接下來(lái),設(shè)備驅(qū)動(dòng)就需要從設(shè)置裝備擺設(shè)空間獲得硬件的參數(shù)。PCI設(shè)備的良多參數(shù),搜羅所用的間斷號(hào),端口地址的規(guī)模(I/O)體例、存儲(chǔ)器的地址(存儲(chǔ)器映射體例)等,都可以從PCI設(shè)置裝備擺設(shè)空間的各基址所對(duì)應(yīng)的尋址空間中獲得。讀寫(xiě)設(shè)置裝備擺設(shè)空間可以挪用BIOS間斷1AH,

  也可以先向設(shè)置裝備擺設(shè)空間地址寄放器(0CF8H)寫(xiě)入總線和設(shè)備號(hào)(在前面搜索PCI器件時(shí)獲得的)和寄放器號(hào),再對(duì)設(shè)置裝備擺設(shè)空間數(shù)據(jù)寄放器(0CFCH)進(jìn)行讀寫(xiě)。對(duì)設(shè)備驅(qū)動(dòng)來(lái)說(shuō),最主要的是獲得基址寄放器(BADR),不能認(rèn)為PCI器件資本老是設(shè)計(jì)設(shè)備時(shí)設(shè)置的初值,系統(tǒng)可能會(huì)按照硬件情形為PCI設(shè)備分配新的資本。我們所設(shè)計(jì)的PCI設(shè)備使用的基址1-3都是按I/O空間映射的,而基址4是按內(nèi)存體例映射的。確定一個(gè)端口是按什么體例映射的,可以讀對(duì)應(yīng)端口的設(shè)置裝備擺設(shè)寄放器(Configuration Register)。讀出后,判定其0位,若是0位為數(shù)值0,暗示其是按內(nèi)存體例設(shè)置的,否則為I/O體例設(shè)置的。內(nèi)存體例和I/O體例的設(shè)置裝備擺設(shè)寄放器的寄義參見(jiàn)文獻(xiàn)[3]。若是要獲得基址的巨細(xì),可以向基址寄放器寫(xiě)入FFFFH,然后讀基址寄放器,若是是內(nèi)存體例,從第4位起頭的0的數(shù)目暗示基址的巨細(xì),若是是I/O體例,則從第2位起頭的0的數(shù)目暗示基址的巨細(xì)。

  在Windows NT下,查找PCI設(shè)備的工作是由HalGetBusData完成的,也可以使用前述的法子讀取設(shè)置裝備擺設(shè)寄放器,但DDK舉薦使用HaiGetBusDataOffset函數(shù)。

  (2)端口操作

  在PC機(jī)上,I/O端口尋址空間和內(nèi)存尋址空間是分歧的,所以措置體例也分歧。I/O空間是一個(gè)64K字節(jié)的尋址空間,它不象內(nèi)存有實(shí)模式和呵護(hù)模式之分,在各類模式下尋址體例不異。在Windows 9x下,用戶軌范可以直接使用I/O指令,而不必然非經(jīng)由過(guò)程專門(mén)的驅(qū)動(dòng)軌范來(lái)完成,所以若是軟件對(duì)硬件的操作美全是經(jīng)由過(guò)程I/O端口操作來(lái)完成的,甚至可以不用專門(mén)設(shè)計(jì)驅(qū)動(dòng)軌范,直接由應(yīng)用軌范來(lái)完成對(duì)硬件的節(jié)制。因?yàn)?strong>PCI總線是32位的總線尺度,在進(jìn)行I/O操作時(shí)凡是要進(jìn)行雙字(DWORD)操作,而且以前年夜年夜都C/C++編譯軟件都沒(méi)有供給雙字的函數(shù),所以需要機(jī)關(guān)雙字操作讀寫(xiě)函數(shù)inpd/outpd。

  在Windows NT下,系統(tǒng)不許可處于優(yōu)先級(jí)3級(jí)的用戶軌范和用戶模式驅(qū)動(dòng)軌范直接使用I/O指令,若是使用了I/O指令將會(huì)導(dǎo)致特權(quán)指令意外(privileged instruction exception)。所以任何對(duì)I/O的操作都需要借助內(nèi)核模式驅(qū)動(dòng)來(lái)完成。具體的做法有兩種:一是在驅(qū)動(dòng)軌范中使用IoReportResourceUsage陳述資本占用,然后使用READ_PORT_XXX、WRITE_PORT_XXX函數(shù)讀寫(xiě),最后使用IoReportResourceUsage打消資本占用;另一種是驅(qū)動(dòng)軌范改削NT的I/OPermissions Map (IOPM),以使系統(tǒng)許可用戶軌范對(duì)指定的I/O端口進(jìn)行操作,這時(shí)用戶軌范采用凡是的I/O指令進(jìn)行操作。后者的利益是速度快、用戶軌范設(shè)計(jì)簡(jiǎn)單,但犧牲了移植性,軌范不能移植到非Intel的系統(tǒng)中,而且若是多個(gè)軌范同時(shí)讀寫(xiě)統(tǒng)一端口輕易導(dǎo)致沖突。

  (3)內(nèi)存的讀寫(xiě)

  Windows工作在32位呵護(hù)模式下,呵護(hù)模式與實(shí)模式的根柢區(qū)別在于CPU尋址體例上的分歧,這也是Windows驅(qū)動(dòng)軌范設(shè)計(jì)中需要著重解決的問(wèn)題。Windows采用了分段、分頁(yè)機(jī)制(圖1),這樣使應(yīng)用軌范發(fā)生一種錯(cuò)覺(jué),好象軌范中可以使用很是年夜的物理存儲(chǔ)空間。這樣做最年夜的益處就是一個(gè)軌范可以很輕易地在物理內(nèi)存容量紛歧樣的、設(shè)置裝備擺設(shè)規(guī)模分歧很年夜的計(jì)較機(jī)上運(yùn)行,編程人員使用虛擬存儲(chǔ)器可以寫(xiě)出比任何現(xiàn)實(shí)設(shè)置裝備擺設(shè)的物理存儲(chǔ)器都年夜得多的軌范。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉