基于PCI總線的嵌入式實時圖像處理系統(tǒng)
Windows主要根據(jù)頁錯誤機制實現(xiàn)對存儲器映射設備訪問的虛擬化。要捕獲對某個設備內存的訪問,設備VxD驅動程序會將頁表中對應于相應當內存頁標注為“不可用”。當在虛擬環(huán)境中運行的程序試圖訪問這個頁時,會產生一個錯誤。VM的異常處理器會調用已注冊的設備VxD驅動程序的頁錯誤處理器進行相關處理,即當VM訪問該端口時產生異常時進入該硬件的回調處理器,由我們自己編寫的函數(shù)進行處理。
3.2 各種驅動程序比較
常見的驅動程序包括三種:VxD,KMD和WDM。
(1) VxD:虛擬設備驅動程序,是系統(tǒng)用于各種硬件資源識別、管理、維護運作的擴展。VxD和VMM一起維持著系統(tǒng)的運作。VxD運作組Intel系列CPU保護模式下的Ring0,擁有對硬件的最高控制權。
(2) KMD,Kernel Mode Driver。它是WindowsNT下提出的管理、維護硬件運作的驅動程序模式。該Driver運行于WindowsNT的Kernel模式下(類似于Ring0)。但一個KMD的運行環(huán)境在不同的時候是根本不同的,Driver收到設備請求時的運行環(huán)境很可能和設備請求實際操作的運行環(huán)境根本不同,因此在WindowsNT下Driver的運作受到WindowsNT本身的很多限制。
(3) WDM,Win32 Driver Model。它可以和Windows2000兼容,MS力推的全新的驅動程序模式,它實際也可以理解為一個即插即用的KMD。WMD代碼很長,Windows98對WDM支持有限,因此WMD難以一時取代VxD。
3.3 PCI2040驅動程序開發(fā)
PCI2040不是標準的硬件設備,因此必須自己編寫PCI2040的硬件安裝信息文件和驅動程序。PCI2040配置空間如附表: 其中設備ID用以標識特定的設備,具體的代碼由供應商來分派;供應商ID用以表明設備的制造者,這二者是識別PCI設備的唯一標識。對于PCI2040來說,當讀Vendor-device ID時,返回值為AC60104C。
(1) 設備信息安裝文件
設備信息安裝文件(.INF)包含了驅動程序的名稱、驅動程序應該復制到的目錄,以及在驅動程序安裝時必須生成和修改的注冊表入口。
在編寫INF文件時,可以使用了VtoolsD開發(fā)包中的INF Editor工具,以下是我所編寫的PCI2040安裝信息文件。
[Version]
Signature=$CHICAGO$
Class=PCI Bridge file://設備類型為PCI橋設備
Provider=%String0% file://供應商的名稱
[ClassInstall]
[DestinationDirs]
DefaultDestDir=11 file://將驅動程序安裝在
file://C:WindowsSystem目錄下
[Manufacturer]
%String1%=SECTION_0
[SECTION_0]
%String2%=sevenstar,PCIVEN_104CDEV_AC60
[sevenstar]
CopyFiles=CopyFiles_sevenstar
AddReg=AddReg_sevenstar
[CopyFiles_sevenstar]
DSP_PCI_Bridge.vxd file://驅動程序的名稱為 file://DSP_PCI_Bridge.vxd
[AddReg_sevenstar]
HKR,,DevLoader,0, DSP_PCI_Bridge.vxd file://在注 file://冊表中添加相關信息
[sevenstar_LogConfig]
ConfigPriority=NORMAL
IRQConfig=3,7,9,10,15 file://指定PCI2040可 file://選的中斷口
[ControlFlags]
[SourceDisksNames]
1=pci2040驅動盤,,0000-0000
[SourceDisksFiles]
DSP_PCI_Bridge.vxd=1
[Strings]
String0="Texas Instruments"
String1="TI"
String2=“PCI橋接”
(2) VxD的創(chuàng)建
Windows支持靜態(tài)安裝和動態(tài)安裝VxD,前者是在Windows初始化時安裝VxD并一直保存在Windows中,后者是在一個應用程序或其他VxD的控制下安裝和卸載。靜態(tài)安裝的VxD始終占用著一定的內存資源以及中斷口,若不是一直運行,則導致了資源浪費。
在使用QuickVxD開發(fā)VxD只需在Dynamically Loadable選項中打勾就行了,其中Device Name是指我們的VxD的設備名,每個VxD都有設備名這兒是指PCI2040芯片,Device ID是用來標識設備,只有當該VxD需要提供對其他VxD的調用入口時才用,且不能任意取應該由Microsoft公司提供,一般情況直接用UNDEFINED_DEVICE_ID就行了,Device Initialization Order確定Windows對VxD的安裝順序,比如你想要你的VxD先于VDD初始化就應該設置為VDD_INIT_ORDER-1,一般情況也使用默認值。
4 結束語
圖像處理系統(tǒng)實現(xiàn)的關鍵在于如何對大容量的信息進行暫存、壓縮和傳輸?shù)葐栴}進行處理。本系統(tǒng)的實現(xiàn)很好的解決了這三個難題。在圖像信息暫存方面充分利用了DSP存儲空間的可擴展性,保證了系統(tǒng)可暫存的信息量足夠大;信息壓縮是DSP的最擅長做的事情,可以在很短的時間內完成大量的信息壓縮工作;PCI總線的引入保證了信息在足夠的帶寬下進行快速傳輸。
評論