A : WinDriver沒有支持NDIS設備\驅動,原因如下
1.NDIS用於通信/ netwrok設備,它不是客製化的驅動程序,此驅動程序是kernel mode的驅動,與另一種Microsoft為底的驅動進行通信,它負責內核的通信協議和功能。WinDriver無法實現內核到內核通信,只能從使用者界面到內核模式。
2.NDIS是一個微軟專有的驅動程序,您無法開發一個代替的驅動而沒有支付微軟任何費用。
請參考手冊http://www.jungo.com/st/support/documentation/windriver/11.8.0/wdpci_manual.mhtml/drivers_func_classification.html#miniport_drivers
USB.org已經為網路設備開發一個開放的協議,叫做CDC-ECM (或 CDC-NCM),如果您需要執行該設備去替代NDIS,WinDriver的二進制驅動程序基於CDC設備可以提供一個很好的解決方案。
A : 可以的,此實現與WinDriver API或驅動無關,此取決於開發人員在應用程序邏輯中驗證硬件與其他卡的運作,此與WinDriver無關且WinDriver API不會影響此行為。
A1 : 會,當安裝gui wizard即代表正在使用Jungo預先提供含有.cat檔案的驅動,當您生成一個新的項目與INF檔案,這些項目沒有簽屬數字簽名,因此需要新的.cat檔案,Jungo.cat只適用於gui wizard
A : 沒有簡單的方法可以在兩台設備中做同步,API中也沒有建立此方法,此實現是完成在主機端應用程序,由開發人員處理,因此同步兩個設備沒有在WinDriver的支持範圍內。
A : Regular”存儲器(例如stack, heap)是由作業系統緩衝,當使用WD_DMALock()時,為使它的DMA是安全的,所以該數據非緩衝。因此,存儲器存取速度較慢,請注意,這是用於DMA正確的方式。當執行連續的緩衝區DMA(Contiguous Buffer DMA),您可以在WDC_DMAContigBufLock的參數中,設置DMA_ALLOW_CACHE 標誌,或直接在WD_DMA結構的dwOptions 標誌,傳遞給WD_DMALock() (使用低級別的WinDriver API),為了分配緩存的DMA緩衝區。在Windows x86和x86_64平台上運作時,建議始終設置該標誌。
(請注意:從WinDriver 5.2.1版本開始,DMA_ALLOW_CACHE標誌是有效的。)
如果您在用戶模式分配存儲器,然後通過其地址到WDC_DMASGBufLock()或低級別的WD_DMALock(),以便鎖定一個分散/集中DMA緩衝區,然後調用WD_DMAUnlock()將解鎖內存緩衝區和它像其他現在“正規”的內存存取速度。
A : 需要為分散/集中(S/G) DMA,鎖定一個大的DMA緩衝區(超過1MB以上),也就是當KERNEL_BUFFER_ALLOC DMA選項標誌沒有被設置時,使用WD_DMALock(),請執行下列步驟。
請注意當使用高層次的WDC_DMASGBufLock()時(從WinDriver v7.0.0版本開始),您不需要進行類似的配置,鎖定大型DMA緩衝區; 此功能已經為您處理。當使用低級別的WD_DMALock()功能,僅需下列步驟。
WD_DMA 結構中的dwOptions領域,設置 DMA_LARGE_BUFFER標誌,作為傳遞WD_DMALock()的pDmaparameter(“the WD_DMAstructure”)。(請注意:當執行分散/集中DMA時,會需要此標誌,而不是執行連續的緩衝區DMA)。
您需要鎖定的計算頁面,以下面的方法並將其分配給t WD_DMA結構的dwPages領域:dwPagesNeeded = transferCount / 4096 + 2;
其中,transferCount是要鎖定的字節數。
請注意:在默認情況下,WD_DMA結構可以容納高達256頁的訊息(= WD_DMA_PAGES, defined inWinDriver/include/windrvr.h)。如果您想鎖定超過256頁的訊息,需要有足夠的內存來保存所有頁面的資訊,以分配內存取得其他的資訊,您可以執行以下操作:
WD_DMA *pDma;
pDma = (WD_DMA *)malloc(sizeof(WD_DMA) + sizeof(WD_DMA_PAGE)*(dwPagesNeeded – WD_DMA_PAGES));
如果內存分配仍然失敗(以上述概括的方式,無論是使用WDC_DMASGBufLock(),或WD_DMALock()),確認是否有足夠的系統資源嘗試內存分配(在kernel和在存儲器映圖的用戶模式地址空間)。在Windows,您可能需要增加共同分頁的大小(從該存儲器分配),更多資訊請參考Technical Document 58。如果仍無法鎖定整個緩衝區,請嘗試鎖定一個較小的緩衝區,更多WinDriver DMA表現的資訊,請參考WinDriver pci User’s Manual的WinDriver Implementations Issues章節,其中的Performing DMA,以及手冊中Function Reference 章節的WinDriver DMA APIs說明。
WARNING!! You did not choose an Access Register for this interrupt. If you do not want to specify a register you will have to manually change the code generated by DriverWizard.
A : PCI使用電平敏感中斷,在內核被接收時必須立即清除。因此,WinDriver需要您定義一個中斷狀態寄存器,它應該為了清除中斷而被讀/寫,這是一個預防性的功能,因為這是無法確認一個電平敏感中斷是否可以掛上您的電腦。關於如何使用WinDriver的DriverWizard聽取PCI中斷,請參考Technical Document 105。另外,亦請參考 Technical Document 75,以及WinDriver PCI User’s Manual,以便了解關於PCI中斷的處理。
請注意,如同WinDriver手冊中的詳細說明,為了在即插即用(PNP)的Windows作業系統,正確處理PCI斷,您必須先為設備安裝INF文件,此設備可以使用WinDriver’s PnP driver為它註冊而運作(windrvr6.sys在最新版本WinDriver中的名稱;在以前的版本中-windrvr.sys/wdpnp.sys/wdusb.sys,根據不同版本而有不同名稱)。
A : 當一個PCI中斷發生時,WinDriver會讀寫中斷狀態寄存器,以便清除(確認)電平敏感中斷。這是在kernel直接執行,根據在代碼中設置的資訊,事先授予權力的中斷。中斷被清除之前,讀取和保存中斷寄存器的值,因此您之後在中斷處理程序中,可以參考此值,在中斷傳送命令中您需要設置一個相關的讀取命令,在WD_INTERRUPT結構中的dwCmd領域做設置,此被傳遞到在(/InterruptThreadEnable()早期版本中的InterruptEnable(),並在WD_INTERRUPT結構中的dwOptions領域,設置INTERRUPT_CMD_COPY標誌(int.dwOptions |= INTERRUPT_CMD_COPY)。更多資訊請參考WinDriver PCI手冊中的Interrupt Handling章節,以及技術手冊104與 75。
A : 首先,在WinDriver Support頁面查看可用的WinDriver資源。如果您的問題無法找到答案,可以使用Support Center描述您的問題或其他類型的問題也可以得到支援。
為了確保可以快速和有效的回覆,請詳細說明所有相關信息,在Support Center中,如同以下方式描述。
您也可以通過電話與我們聯繫,如果您在我們工作以外的時間撥打,或所有支持人員忙線,請留下您的詳細聯繫方式(例如姓名、公司名稱、電子郵箱和電話號碼),我們會盡快與您聯繫。
當您描述問題時,請包括所有您執行的步驟,以及說明哪一步驟失敗(包括完整的錯誤消息)。
提交技術問題前,請明確檢查已經包含以下訊息:
1. 在一般情況下,請註明
· 您的作業系統。例如:Windows 8 64-bit; Windows XP SP3; Windows Embedded Compact 7, Windows CE v7.0; RedHat Linux 7.2, Linux kernel version 2.6.32-5-686.
· 您的WinDriver版本。例如: WinDriver version 11.8.0.
· Debug Monitor 所有訊息輸出:運行Debug Monitor,設置debug的級別為“Trace”,再重現您的問題,並提供從Debug Monitor視窗輸出的訊息(包括上面的版本訊息)。
2. License問題:除了Debug Monitor log,請務必提供您的完整License string(在購買WinDriver時會收到此License string),還有開發電腦中的registration code。您可以在DriverWizard’s Licensing Information中,查看License string與電腦中registration code (File –> Registration Options)。
3. PCI相關的問題:除了Debug Monitor log,請提供pci_dump的完整輸出訊息(可以在WinDriver/util 目錄中找到),同時也提供您設備的供應商ID(vendor ID)和設備ID(device ID)。
4. 安裝相關的問題 : 除了Debug Monitor輸出,請明確描述您執行的安裝步驟(哪些文件複製到哪個目錄;使用wdreg安裝工具;INF文件的安裝等等)與每一步驟的結果,並提供您收到(如果有的話)的錯誤消息。
在Windows所有即插即用的平台(Windows 98與以上的版本,不包括Windows NT 4.0),請提供安裝設備INF文件(如果有的話),以及在有問題的電腦中%WINDIR%\setupapi.log 文件。
A :如果您使用Kernel PlugIn來開發Windows SYS driver,需要安裝微軟的Windows Driver Kit (WDK),或早期的Driver Development Kit (DDK) – 此取決於您的目標作業系統和WinDriver的版本,以便成功建立您的Kernel PlugIn driver。
有關WDK的更多訊息,請參考 http://www.microsoft.com/whdc/devtools/WDK/WDKpkg.mspx
(請注意,當您使用WDK/DDK來建立Kernel PlugIn driver,您需要設置BASEDIR或為您的DDK函數庫設置DDKROOT 環境變量,更多資訊請參考WinDriver User’s Manual。)
VxD Kernel PlugIn的驅動開發,在早期版本WinDriver (v6.0x-)的版本中,有支持Windows 98 / Me中,WinDriver不會為了要成功建立驅動而要求您安裝微軟的WDK / DDK,除非您選擇添加您自己的DDK函數調用到您的Kernel PlugIn應用程序。 (請注意,使用特定作業系統的DDK功能會損壞驅動器的可攜帶性)。
A : 在試用版本的範例程序(沒有License時可以發行和使用),您可以修改您的源代碼,以便註冊您的License,其他更詳細的資訊,請參考 FAQ#REG1。
A : 這可能是硬體問題,由於並行端口模式的BIOS特定實現會在不同電腦上,WinDriver無法控制此行為,因為它已被編程到BIOS中,建議您遵循電腦的品牌或已觀察到正確運作的BIOS。
Q : 我的設備功能正常,也可以在Linux以及Windows (WinDriver V6.0.中正確識別,但是在 2)Windows中,無法經由WinDriver的PCI應用程序,識別此設備,請問原因為何。
A : 在WinDriver driver的INF文件夾中,設置PciCfgRw Compat 註冊標誌(v10.3.1或v10.3.1以上的版本),以1當作能夠使PCI配置空間讀/寫的方法,請參考Technical Document 2。
Q : 當我在Windows XP中安裝WinDriver的基礎驅動程序時,Windows顯示此錯誤:
您為此硬體安裝的軟件沒有通過Windows Logo測試,可能損害或破壞系統的正常運行,請問如何避免此訊息? A : 此訊息非真的錯誤消息,在安裝過程中或是驅動是沒有任何問題的,微軟Windows XP發出此訊息,表示Driver沒有測試也沒有通過微軟的Windows Certification Program(以前的Windows Hardware Quality Labs (WHQL稱為Windows Logo Program (WLP)) Certification)。為了避免此訊息,也為了使您的驅動得到數字簽名,請聯繫Microsoft,欲了解更多訊息請點擊這裡。 |
|
Q : 請問什麼是 WDM設備驅動程序? WinDriver 有支持 WDM嗎?
A : 撰寫設備驅動程序時,開發人員必須為Win 9x和Win NTx Kernels分別撰寫設備驅動程序,為了提供代碼插入設備,微軟已經開發一個跨平台的作業系統去支持輸入設備,並在Windows中可以即插即用(Windows 98和以上的版本,不包括Windows NT 4.0),此種新的支持即為Windows Driver Model或簡稱“WDM”。 WDM是基於原始的Windows NT驅動程序模型,修改為支持即插即用和電源管理,並用於多媒體設備類型以及其他許多新的設備類型,例如:USB和1394設備。 從WinDriver V5.2.0開始,WinDriver的 Kernel Module —(Windrvr6.Sys / Windrvr.Sys In V5.2.2-) —可以實現WinDriver的API,是個完整的WDM驅動。 |
|
Q : 我需要為ISA卡定義20多個“硬體項目” (I/O, Memory, And Interrupts),因此我在Windrvr.H頭文件中增加WD_CARD_ITEMS(由於WD_CARD的結構項目構件定義如同WD_CARD_ITEMS WD_ITEMS結構的陣列)。但現在WD_CardRegister()無法正常運作,請問是為何呢?
|
|
在Windrvr.H中請不要變更任何東西,以造成非期望的變更。
A : 不需要,只有使用WinDriver的callback時,才需要如同__cdecl宣布
A : 有的。您可以選擇從Debug Monitor發送debug訊息到kernel debugger,請詳見Technical Document 44. ,另外,從WinDriver 11.7.0版本開始,您可以選擇自動保存Debug Monitor log。
在Windows中,為了發送debug訊息到kernel debugger,你需要在另一台電腦安裝kernel debugger,以及在這台電腦與開發的電腦建立debug session,若Windows當機,請參考Technical Document 21。在Linux,您可以在/var/log/messages此目錄中,找到kernel debugger log.
A : Debug Monitor(在舊的WinDriver版本中,又稱Monitor Debug Messages),是記錄來自WinDriver kernel driver詳細的調試信息的應用程序。此應用程序有兩個版本:wddebug_gui – 一個完全圖形化版本;以及wddebug – 控制模式版本,同時也支持基於Windows CE平台的GUI執行(從WinDriver的v10.0.1開始)。
可以在WinDriver/util;,找到兩種Debug Monitor版本,(在Mac OS X中,在WinDriver版本可以支持它,也可以在OS’s /Applications folder找到 GUI版本)。
有關此更詳細的信息,以及如何使用,請參考WinDriver User’s Manuals和TechnicalDocuments12 (wddebug_gui for Windows, Mac OS X, Linux, and Solaris), 13(wddebug for Windows, Windows CE (包括Windows Mobile),Mac OS X, Linux, and Solaris)以及 14 (wddebug for VxWorks — 僅支持WinDriver的v5.2.2)。
有關更多從Debug Monitor重新定向debug資訊到kernel debugger,請參考Technical Document 44。
請注意:Debug Monitor只可以在目標平台運行WinDriver驅動程序,而不是已安裝的WinDriver工具包。此工具是很有幫助的,可以讓您在客戶的平台上調試問題,更多資訊請參考FAQ #lfc6009。
A : 若您沒有經驗也沒有關係,您可以在user mode使用WinDriver去撰寫設備驅動程序,WinDriver已經提供較低級別實現WinDriver API的kernel mode驅動程序(請參考WinDriver User’s Manuals的WinDriver架構概述)。因此,您可以在user mode,使用喜歡的開發環境編程和調試驅動程序,因此可以降低您開發設備驅動程序的時間。
建議開發步驟:
1. 開啟DriverWizard – WinDriver/wizard/wdwizard (或/Applications/wdwizard.app在Mac OS X – 有支持此作業系統的WinDriver版本)。在Windows中,您也可以用桌面上的快捷圖案去運行DriverWizard,或從Windows的開始按鈕 : Start –> Programs –> WinDriver –> DriverWizard.
2. 使用圖形化的DriverWizard可以輕鬆測試您的硬件,而無需編寫一行代碼,對於PCI / ISA – 可以讀/寫硬件資源(memory/IO/registers),並聽取中斷。
對於USB – 在管道中傳輸數據,重置設備等等。
3. 從工具欄中選擇“Generate Code”選項,或按Next 按鈕,選擇您的目標編譯程式/開發環境,並讓DriverWizard為您的設備創建驅動程序的骨架。生成的代碼包括方便的結構和功能,它採用WinDriver基本的API來訪問您的硬件,去檢測以及由你定義資源。
您可以使用DriverWizard在C, C#, or Visual Basic .NET (VB.NET)來生成代碼(僅USB);早期的版本(直到v11.2.0)也支持在Delphi (Pascal)或Visual Basic (VB 6.0)生成代碼。DriverWizard也會建立makefile及相關構建環境的32位元和64位元編譯器 – 例如MS Visual Studio, GCC, or Windows GCC MinGW/Cygwin.
您也可以使用WinDriver的基礎範例進行開發,特殊的硬件範例可以在相對應的目錄中看到,例如PLX和Altera,欲瞭解更多,請參考WinDriver User’s Manuals。
您亦可以在WinDriver/samples目錄中看到生程範例,可以在WinDriver/csharp.net (C#)和WinDriver/vb.net (VB.NET)目錄中看到.NET samples(從WinDriver的V7.0.0開始)。
4. 使用手冊和幫助文件修改生成的代碼,並添加您需要的任何特定功能,以符合您的硬件規格。
WinDriver的用戶手冊和幫助文件,可以在WinDriver/docs目錄中看到,也可以透過Windows的開始選單(對於Windows用戶),從WinDriver Support的頁面,也可在網上看到所有的文件。
5. 在任何32位元或64位元編譯器中,從用戶模式編譯並生成代碼。
A : WinDriver的Debug Monitor可以在任何電腦上運行(不同於WinDriver DriverWizard會鎖定在開發的電腦)。因此,您可以從開發的電腦中,簡單地複製wddebug_gui或wddebug程序文件到有安裝WinDriver的目標電腦上,並在目標電腦運行Debug Monitor(從 WinDriver/util 或 Applications on — WinDriver的版本有支持作業系統),,有關Debug Monitor更詳細資訊,請參考 WinDriver User’s Manuals、Debug Monitor FAQ.
: Q為什麼建議使用WinDriver,而不是自己開發設備驅動程序呢?
A
: 使用WinDriver,您將獲得以下好處:
成本:節省90%的開發時間
可靠性
: WinDriver已經在市場上有數千種應用測試(請見客戶成功案例,了解更多)。它已經在市場上的幾乎所有平台上調試過,因此,它不僅加速開發時間,也減少調試時間。
上市時間: WinDriver已經為您準備好,使用WinDriver可以大幅縮短您開發時間。
靈活性: WinDriver支持多種作業系統,例如Windows 8.1/Server 2012 R2/8/Server 2012/7/Server
2008 R2/Vista/Server 2008/Server 2003/XP, Embedded Windows 8.1/8/7,
Windows CE/Mobile, and Linux(取決於您所使用的版本) – 所以即使您只需要驅動程序在一個平台上,使用WinDriver可以靈活地讓您在任何平台上運行(請參考Technical Document 4)。
穩定性 – WinDriver讓您遠離較困難的OS
kernel,當我們預先寫好的kernel module執行於您的硬體時,您寫的代碼會在受保護的application mode,您會得到kernel mode驅動(由我們經驗豐富的開發人員),在任何OS/platform/BIOS做測試。
: 使用WinDriver時,若沒有在內核模式下進行編程,是否代表我還沒有建立驅動?
A
: 設備驅動程序是控制硬體的軟件模組,在現今的作業系統中,軟體模組通常存在於kernel mode (ring 0),然而在用戶模式下,WinDriver可以幫助您編寫此代碼,利用低級別的核心驅動程序,使您無需具備驅動程序開發的知識。為更了解WinDriver的基本架構,請參考WinDriver的用戶手冊。
WinDriver還包括Kernel
PlugIn的功能,它允許降低您部分的user mode代碼至kernel
mode,以獲得更好的性能和更大的靈活性(for PCI/CardBus/PCMCIA/PCI
Express/ISA)。無論您在user mode或kernel mode開發的代碼,它仍然是操控於硬體,因此它是驅動程序。
A : 是的
C++)嗎?
A : 可以的!您撰寫的設備驅動程序代碼,可以正常的在Win32用戶模式運行。因此,您可以使用微軟的Visual Studio/Visual C++去編譯和調試您的代碼。請參閱技術文件19
A : WinDriver是提供工程師驅動程式開發工具,無法提供現成的驅動程式。
Q : 我在WinDriver的DMA章節中,看到Xilinx的範 例是為ML605設計的? 如何找到相對應的fpga代碼? 另外我使用WinDriver時,出現「Unable to initalize WDC」畫面,請問原因為何?
http://www.microsoft.com/en-us/search/DownloadResults.aspx?q=windows+xp+root+certificates&sortby=-availabledate
DMA的實現是取決於特定的硬件與客戶的硬件設計,Jungo僅基於BMD的設計,提供Xilinx的範例,此BMD的範例與您Xilinx fpga並無相關,它可以上傳許多xilinx晶片,包括ML605,ML505等等。
建議您使用我們的範例做參考,並更改您特定的邏輯操作
Q : 在使用Altera的開發板,以中斷方式來讀取一些按鍵 值,按照sample code 做,沒有產生反應, 但是用開發板附的測試軟體和WinDriver IDE則可以產生中斷
請附上debug monitor
Q : 在Linux上使用 DMA,僅可以配置4M的記憶體,無法配置 16M 的連續記憶體,請問原因為何?
Q : 在winform中,我使用C#去撰寫開發,但在C# lib中,找不到WD_Open() .func.tion.,請問在那裡可以找到呢?
或csharp.net\usb_範例,這是使用高等級API 和 wdapiXXX.dll
Q : 我們使用WinDriver去開發Xilinx v5 PCIe DMA,利用WinDriver提供的範例去撰寫DMA,後來發現在鎖定分配中,時間的花費變長,從100ms到15000ms,
而且未能在最後鎖定記憶體。請問是否可以撰寫兩個DMA可變因素,並連接PCIE,一個DMA用於讀,另一個用於寫? 之後對這兩個DMA分配記憶體,
請問是否可以使用很多次?
可以看到時間變慢的原因。
可能是視窗較難找到所要求的連續緩衝區,有個好的解決方案是使用預分配的緩衝區,每次重複使用,請參考以下
http://www.jungo.com/st/support/tech_docs/td3.html
當使用緩衝區分配前置時,您會看到debug print。
Q : 我需要使用Timer去撰寫程式,Jungo提供的tools Generate雖可以使用,但是性能與原來差距太大,是否有其他的解決方式呢?
您可以更改為適合您邏輯的方式。
Q : 請問WinDriver是否有提供 Kernel sample code?
Techdoc#17 http://www.jungo.com/st/support/tech_docs/td17.html
Kernel plug in – http://goo.gl/wEPhp0
若仍無法解決您的問題,請您聯繫大中華代理商 網護科技,並詳細說明您的情況,我們會請原廠提供您更精確的協助
Q : WinDriver Debug Monitor顯示出以下訊息,請問該如何處理呢?
“transform_32_to_64: unknown ioctl 0x953826e7 (0x9b9)”
“Rebuild your application with -DKERNEL_64BIT flag. Contact support@jungo.com for more details“
http://www.jungo.com/st/support/documentation/windriver/11.7.0/wdpci_manual.mhtml/32bit_app_on_64bit_arch_win_unix.html
Q : 我們是on board的板子,想要在不同電腦使用WinDriver試用版開發驅動,是否可再將開發出來的source code轉到目標電腦,利用WinDriver正式序號去做編 譯?
如果您必須繼續開發驅動在您on board的電腦,可以使用DLL的方式去編譯WinDriver,再使用WinDriver去開發您的專案。
另外,您無法生成也無法移動visual studio,到另一台電腦重新編譯。
Q : 請參考以下圖片,在Ubuntu 12.04 LTS with kernel 3.4.7,使用Driver Wizard,當我創建一個新的項目,並選擇欲使用的USB設備,但出現錯誤(如下圖)
由於安裝WinDriver,在Linux與Windows有很大的不同,請參考在Linux 安裝時的WinDriver手冊
http://www.jungo.com/st/support/documentation/windriver/11.6.0/wdusb_manual.mhtml/wd_install_process.html#wd_linux_installation
Q : 在試用WinDriver 11.6版本時,Windows7和Windows XP都能對PCIE的BAR記憶體進行正常的操作,但在Windows8.1,卻無法正常操作,請問是什麼原因呢?
Q : 請問WinDriver是否支援多個應用程式同時使用某個硬體,例如:一塊PCI時間卡,其他應用也可以獲取到精確的時間。
您可以在DLL中,使用WinDriver的API,或使用一個單一的主要應用程序,去調用自身內部的其他應用程式,正如上述所提,此已超出WinDriver的支持範圍,
不推薦使用此方式。
Q : 在Win8 64位元安裝WinDriver生成的INF,卻出現錯誤訊息 : 第三方INF不包含數字簽名信息,請問是什麼原因呢?
http://msdn.microsoft.com/en-us/library/windows/hardware/ff548231(v=vs.85).aspx
Q : 在driver wizard中能正確寫入和讀取PCIE memory的寄存器,但是用code wizard生成MS Develop studio 2005 for x86後,使用控制台進行寫入和
讀取PCIE memory內容時,寫入和讀取的資料不對。請問是什麼原因呢?
Q : linux版本的測試軟體在Ubuntu12.04版本進行配置編譯,發現有錯誤如下,請問是什麼原因呢?
root@ubuntu:/home/bocom/WinDriver/redist# ./configure –disable-usb-support
USE_KBUILD = yes
checking for cpu architecture… x86_64
checking for WinDriver root directory… /home/bocom/WinDriver
checking for linux kernel source… found at /lib/modules/3.2.0-23-generic/build
not found
configure.wd: error: please install the kernel source or specify alternate location
要指定一個”備用位置”,您可以使用配置選項 -with-kernel-source=path to build with kernel source directory <path>.
(“./configure –with-kernel-source=/<custom path>/usr/src/linux –disable-usb-support”)
如果沒有usr directory,可以從<custom directory name>去創建usr。
Q : 想使用Windriver開發WindowsXP的驅動,我在主機上插入四塊PCIe的設備卡,請問Windriver能適用這種情況嗎?如果適用,應該寫幾個驅動呢?
Q : 在Windows 7 64bit的作業系統下安裝驅動,已確認有管理員許可權,但仍顯示cannot open service control manager, make sure you are running with
Administratorprivileges,請問應該如何處理?
1. 請檢查您的電腦是否有管理員權限
2. 請確認安裝WinDriver時,是以管理員身分
3. 請檢查使用wdreg的64bit時,是在WinDriver 64bit的版本
Q : 我已按照WinDriver手冊產生INF並已安裝完成,但還是無法使用熱插拔,請問應該如何處理?
Q : WinDriver是否有提供在Windows 7的PCIe熱插拔案例?
請按順序執行下列步驟:
1. 確認主機上的PCI-E 插槽是否支持PCI-E hotplug,並非所有的PCI-E uses都有支持(通常沒有),可查詢PC主機板或規格是否有支持。
2. 插入設備並安裝WinDriver之後重新開機,執行GUI wizard與安裝INF。
3. 插入/移除PCI-E並檢查設備是否被正確列舉,該PCI-E會出現在Windows device manager。
Q : 在Windows環境下, Windriver針對某個可讀寫的Register會對1048的位置會自動加1,當超過FFFF會自動變零,但將device manager的windriver停掉則不會發 生此狀況,請問原因為何?
Q : 我在運行WinDriver自動生成的代碼時,找到pci設備後提示: “failed opening a handle to the device:failed opening a WDC device handle.
error0x200000e – resource overlap”請問是什麼原因呢?
而DriverWizard會被認為是一個額外的應用程式。
Q : 請問在Windriver圖形界面中,該如何allocate一塊連續memory測試DMA的讀寫?
關於DMA測試,由於每個硬體有其獨特的實現在內存範圍,因此沒有具體的sample可提供。
Q : 我們有一個ISA device的 Driver 從Windows XP 升級到Windows 7 (32 bits),
所以我們migrate WinDriver from v9.20 to v11.20,但發現enable interrupt時失敗, WDC_IntEnable(), 回ERROR CODE 0x2000000c – Failed enabling interrupt
我們的PCI device 的driver migration 是沒此問題, 原來的ISA XP版本也OK,請問是否需要額外再做一些修改?
具體地來說,如果所請求的IRQ不知道此系統的功能,NT_HalGetInterruptVector會失敗。
如果IRQ是免費開放的裝置管理員,要測試時請選擇“View→Resources by type” ,將會看到IRQ在列表中
透過WinDriver,分配一個可用的IRQ (如IRQ 10)
Make a copy of the files in WinDriver\redist
Edit windrvr6.inf to have:
[ DriverInstall.NT ]
COPYFILES = DriverCopyFiles
LogConfig = config_irq
[ config_irq ]
IRQConfig = 10
重新安裝WinDriver 兩個檔 : wdreg -INF windrvr6.inf使用裝置管理員打開WinDriver編寫的性質,並確保資源選項卡中出現與所選擇的IRQ 。
由於IRQ資源在windriver被註冊為虛擬裝置,建議重新命名此driver,避免與WinDriver其它例子造成衝突。
Q : 在Windows 7作業系統,想使用PCIe的熱插拔功能,請問應該如何執行?
1. 由於並非所有的PCI-E匯流排是hot plugable,請先確保您的PCI-E插槽支持PCI-E熱插拔。
2. 重啟PC,插入設備並安裝WinDriver。
3. 插入/移除PCI-E設備和檢查設備是否被正確列舉。
Q:WinDriver的安裝路徑下有xilinx的V5的pcie的例程,在該例程中有用到DMA數據傳輸方式,但在WinDriver中該如何添加DMA資源?
Q : 我欲在NI的編譯環境(National Instrutments CVI)底下使用Jungo的API,若想參考範例bmd_diag中的interrupt DMA方式時,在執行WDC_IntEnable時,WinDriver會檢查是否有安裝 .inf 檔; 若沒安裝,WDC_IntEnable會回傳Driver not installed的error,但在實際使用上,我們的板卡需要安裝由NI wizard所產生出來的INF,因此,執行WDC_IntEnable時,就會產生error,因此想請教是否有辦法解決此問題,例如:可整合由windriver wizard所產生的INF以及 NI 的INF ?
Q:當程式執行到 WDC_PciScanDevices 時,回傳的結果卻為WD_NO_LICENSE ,請問原因為何?
Q:請問使用WinDriver生成驅動時,該設備的Device CLASS該如何修改?
Q:我已經利用WinDriver試用版成功開發驅動程式,請問若取得正式序號是否仍需要做調整?
Q:在PLX9030的範例中,該如何添加Kernel Plugin的程式。
Q:物理位置映射是在哪一個API中完成?
Q:在WinDriver API中對EEPROM做讀寫,是否有實際寫入?
Q:請問傳統中斷的中斷訊號發出後,應該如何確認並清除該中斷訊號呢?
Q:在Linux下執行WinDriver時,一定需要root權限嗎? 是否可以在一般權限下使用WinDriver?
Q:我已經利用WinDriver成功開發Linux驅動,欲將此驅動移植至Windows平台,在Linux有提供類似udelay ()的暫停函數,請問在WinDriver上有提供類似的函數嗎?
http://www.jungo.com/st/support/documentation/windriver/11.3.0/wdpci_manual.mhtml/WDC_LIB_API.html#WDC_Sleep
Q:我需要同時發行32位元和64位元的驅動程式,請問WinDriver是否有提供單一的.sys檔案可以供雙平台同時發布呢?
請參閱技術手冊 http://www.jungo.com/st/support/documentation/windriver/11.2.0/wdpci_manual.mhtml/driver_distribution.html
Q:我需要使用DMA功能,但是我的設備卡是PCI的不是PCI-e,請問適合使用ALTERA的Qsys設計範例嗎?
若DMA的傳輸失敗,建議您使用該範例並且依據您的硬體設備上的DMA設置,修改DMA的功能參數。
【重要通知】WinDriver 技術支援流程
1. WinDriver序號
2. WinDriver的使用環境 ( PCI/ USB、Windows/ Linux/ CE、32bit /64bit)
3. 您的設備的功能應用為何? 使用哪些API?
4. 描述您的技術問題
5. Debug Monitor紀錄
Q:請問WinDriver生成的驅動是否可以在MSC模式執行?
Q:請問WinDriver是否可以支援接收多個中斷訊號?
您可以參閱pci_diag範例程式中的”DiagIntHandler()”,可以在%WinDriver%\samples\pci_diag\pci_diag.c資料夾中找到
> /* Diagnostics interrupt handler routine */
> static void DiagIntHandler(WDC_DEVICE_HANDLE hDev, PCI_INT_RESULT *pIntResult)
> {
> /* TODO: You can modify this function in order to implement your own
> diagnostics interrupt handler routine. */
> printf(“Got interrupt number %ld\n”, pIntResult->dwCounter);
> printf(“Interrupt Type: %s\n”,
> WDC_DIAG_IntTypeDescriptionGet(pIntResult->dwEnabledIntType));
> if (WDC_INT_IS_MSI(pIntResult->dwEnabledIntType))
> printf(“Message Data: 0x%lx\n”, pIntResult->dwLastMessage);
> }
Q:當我在使用WDC_DMAContigBufLock時出現問題,
————————————————————————————-
dma_contig_lock: MmAllocateContiguousMemory failed
dma_contig_lock: try increasing the value of NonPagedPoolSize under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management in the registry (a zero value allocates a default buffer of 110k)
dma_lock: failed (0x20000005)
Table_remove_general (dma): removed handle 1
WDC_DMAContigBufLock: Error 0x20000005 – Insufficient resources
Table_remove (dma): handle 108658884 out of range
WDC_DMABufUnlock: Failed unlocking DMA buffer.
Error 0x20000001 – Invalid handle
Do_card_unlock: entered, hCard 1, last 1
Card_close_handle: hCard 1
Card_close_handle: un-registering item 2 interrupt 9
Irq_close_handle: entered, hInterrupt 1
Irq_disable: received 0 interrupts called 0 dpc Lost count 0
Table_remove_general (irq): removed handle 1
Card_close_handle: un-registering item 1 memory 0xf4000000-0xf5ffffff
Unmap_physical_mem_user: entered, base addr 0D900000, mem section 8A60A5F8
Unmap_physical_mem_krnl: entered, linear addr 0xb2a00000, length 0x2000000, context 00000000
Unmap_physical_mem_krnl – leaving
Card_close_handle: success
Table_remove_general (card): removed handle 1
————————————————————————————-
A:您好,從Debug Monitor可以看到
“WDC_DMAContigBufLock: Error 0x20000005 – Insufficient resources”
此代表該OS在嘗試分配DMA緩衝區時失敗,請重新分配較小的緩衝區,並移除不必要的PCI設備,以便從機器上更多的RAM。
Q:WinDriver視窗中有提到Block transfer可以設定8bit或32bit,以及「Do you wish to increment the address after each read block」,請問是什麼意思?
請參閱「Mode」參數,該參數是用來定義在做I/O或記憶體或I/O位址,在R/W時,一次存取8, 16, 32 or 64 bits也就是1, 2, 4 or 8 bytes的資料尺寸;以及參閱「Options」參數,若您選擇不改變該位址,則該設備位址會保持不變,而是會R/W一個塊狀的記憶體或I/O位址。
Q:請問WinDriver是否可以支援在CPCI上的熱插拔功能嗎?
Q:請問是否可以使用WinDriver撰寫底層的驅動,然後使用 DirectShow 作為其上層API嗎?
Q:請問WinDriver是否提供自動偵測DMA的通行線程?
請參閱技術手冊第9.1章節,內含完整的Direct Memory Access解說。
Q:若欲將使用Altera的程式開發PLX dotnet的驅動程式,請問應該如何修改?
Q:在C:\WinDriver\altera中,有提供Altera的Scatter/Gather DMA代碼,請問是否有其他的範例或文件解說Altera的API嗎?
Q:當我直接使用Altera的範例代碼時,WinDriver會要求必須開啟DriverWizard才可執行此範例。請問是否可以在不開啟DriverWizard情況下,使用該範例程式?
Q:請問是否可以提供針對Altera與PLX設備的DMA範例.Net程式嗎?
您可以使用DriverWizard來撰寫.NET驅動程序,或者挑選使用最符合您需求的WinDriver .NET範例,然後按照您的設備修改WinDriver範例代碼。
Q:若使用WinDriver DMA的C++/C檔案,請問是否使用其.dll檔案便可以存取我的設備?
A:C# 的範例是將原有的C++ DMA範例重新編譯為C#.net框架,並依據您的硬體規格改變API的參數。Q:請問是否可以提供DMA範例程式?
Q:若欲在同一時間插入多款USB設備,每款設備的供應商ID與設備ID皆相同,必須重新安裝驅動程序,因此會造成驅動加載變慢,請問應該如何解決?
同時,亦建議您申請WHQL認證,因為擁有WHQL認證的驅動程序,可以設定為靜默安裝或預先安裝而縮短配置時間。若該驅動程序是由WinDriver進行開發,Jungo可以協助您申請WHQL認證,若有需要請與網護科技聯繫。
Q:在Linux的環境下執行make xconfig命令時出現錯誤,請問應該如何解決?
Q : 當我在使用傳輸功能以實現WDC_ReadAddr32時,卻出現以下代碼,請問應如何處理?
cardReg.Card.dwItems = 1;
cardReg.Card.Item [0]. item = ITEM_MEMORY;
cardReg.Card.Item [0]. fNotSharable = TRUE;
cardReg.Card.Item [0]. I.Mem.dwPhysicalAddr = 0x0; / / Mem registered Bar0 space
cardReg.Card.Item [0]. I.Mem.dwBytes = 1024;
cardReg.Card.Item [0]. I.Mem.dwBar = 0;
WD_CardRegister (hWD, & cardReg);
WD_TRANSFER Trans;
BZERO (Trans);
Trans.cmdTrans = WM_DWORD;
Trans.dwPort = cardReg.Card.Item [0]. I.Mem.dwTransAddr +0;
data0 = Trans.Data.Dword
A : 您可以依據以下步驟進行設置 :
1. 將WD_PCI_CARD_和WD_CARD_REGISTER參數結構設為0。
2. 呼叫WD_PciGetCardInfo來對應你所需的插槽。
3. 複製設備卡數值到WD_CARD_REGISTER結構(類型WD_CARD)。
4. 掃描在Card.Item的資源,並修改fNotSharable和dwOptions(若需要改)。
5. 呼叫WD_CardRegister
請正確輸入傳輸命令,以確保使用正確的[N]數值對應正確的BAR,例如:
cardReg.Card.Item[N] I.Mem.dwTransAddr+Offset
Q : 當我使用WD_CARDREGISTER註冊中斷時,總是顯示註冊失敗,請問應如何處理?
BZERO (cardReg_int);
cardReg_int.Card.dwItems = 1;
cardReg_int.Card.Item [0]. item = ITEM_INTERRUPT;
cardReg_int.Card.Item [0]. fNotSharable = TRUE;
cardReg_int.Card.Item [0]. I.Int.dwInterrupt = 3; / / distribution system, can be seen in the DriverWizard Configuration space in the register INTLN = 3
cardReg_int.Card.Item [0]. I.Int.dwOptions = INTERRUPT_LEVEL_SENSITIVE;
cardReg_int.fCheckLockOnly = FALSE;
WD_CardRegister (hWD, & cardReg_int);
A : 您可以依據以下步驟設置中斷:
1. 註冊設備卡。
2. 使用從WD_CardRegister返回的數據,來建設dwTransAddr傳輸命令。
3. 使用WD_IntEnable來啟用中斷和傳輸命令。
Q : 我的FPGA設備需要添加多個功能,WinDriver是否可以逐一測試,或需將所有的功能添加完全才可測試?
Q : WinDriver是否有提供相關的API以讀寫DMA?
您亦可以使用WDC_WriteAddrBlock()和WDC_ReadAddrBlock()API以讀取和寫入內存(非DMA),請參閱手冊。
Q : WinDriver是否可以改變數據包傳輸的尺寸?
Q : 請問應如何對自己修改定義的巨集進行追蹤?
1. 請使用WinDriver的DriverWiZard生成一個新的驅動程序,並將此專案另存名稱為您欲指定的名稱 (例如:netguard)
2. 在生成的專案資料夾底下,您會找到”netguard_installation”資料夾。此資料夾包括修改驅動程序的文件和安裝腳本netguard_install.bat。請執行此腳本,以加載修改後的驅動。
3. 請確保您的應用程序是使用您欲設定的名稱。
4. 運行您的應用程序。
5. 從命令提示字元底下,使用您的驅動程式名稱作為參數來執行Dubug monitor,
例如,WinDriver/ UTIL / wddebug_gui.exe netguard
Q : 我欲利用WinDriver開發ISA的驅動程式,在裝置管理員底下找到該設備時會出現問號符號,請問應如何識別 ?
請注意,由於ISA卡是不支援即插即用的設備,因此您需要自行設定此設備卡的資源。
Q : 請問如何使用DriverWizard進行大量數據的讀寫測試?
Q : 在Linux環境上,使用WinDriver掃描PCIe設備,可以順利地找到該設備,但是卻無法取得該設備的主控權,請問如何解決?
執行此程式時,請先關閉所有其它應用程序,並確認晶片的電路板已經正確連接電腦。若無法執行,請附上Debug monitor的紀錄。
有可能您的內核空間過於擁擠,而導致錯誤。大部分驅動只需要BAR區域映射到user space,並不需要映射到內核空間,所以請務必在您開啟設備前將WD_ITEMS中的參數dwOptions設置為WD_ITEM_DO_NOT_MAP_KERNEL。
Q : WinDriver是否可對任何Device Classes建立Driver? (不限0xFF的Device class) 例如:我的HID滑鼠Device,是否也可以透過WinDriver對此滑鼠設備建立新的Driver去蓋過原本的Driver?
Q : WinDriver是否可以支援開發USB Audio、HID之設備?
Q : 若此開發設備需要同時使用兩個應用程式,並調用WinDriver API WDC_xxx,但會出現錯誤,請問如何解決嗎?
Q : 我在Linux作業系統欲使用WinDriver開發設備驅動程式,但WinDriver for Linux並未有設備ID與廠商ID的資訊,請問如何辨識該設備?
廠商ID,您便可以辨別此設備是連接到您系統的哪一個插槽,欲瞭解更多請參閱範例應用程式。
Q : 我欲開發一個類似攝影機的設備,並採用攝影機的通訊協定,該攝影機上有個按鈕,我們希望透過此按鈕時電腦可以抓下該擷圖,
但是目前此動作只能透過鍵盤執行,無法使用此設備上的按鈕,因為在驅動裡面抓圖功能似乎是Windows內建的,
所以使用WinDriver無法順利截取圖片,請問我們有辦法使用WinDriver的功能來抓設備上按鈕發出的中斷訊號,但利用Windows內建的功能來擷取圖片嗎?
Q : 我該如何使用WinDriver生成的檔案?
Q : WinDriver生成的程式碼可以用DDK來建置嗎?
Q : 我該如何針對不同系統環境來使用WinDriver API?
Q : WinDriver生成的.sys檔案是否可以修改呢?
Q:當我使用WinDriver開發驅動程式,此工具會自動建立許多檔案並且包含DLL檔案。若我不想看到此DLL檔案,請問如何解決?
Q:WinDriver生成的驅動程式是否會包含原始程式碼?
Q:目前我計畫寫一個應用程式調用WinDriver生成的DLL檔案,請問若WinDriver三十天試用期結束後,該DLL檔案是否可以正常使用?
若您欲繼續使用請購買WinDriver正式序號。
Q:請問欲PDA設備的驅動程式,是否亦可使用WinDriver驅動程式開發工具進行開發?
1. 當PDA為Device端:
將WinDriver安裝在電腦上,運行VS IDE,連結您的客制化USB設備,執行測試、溝通、生成程式架構等動作,並且選擇WinCE,確認您已經設定正確的CPU(例如:x86、ARM等),並且按照下列網址的指示執行開發與發行步驟。
2. 當PDA為Host端:
若您欲使用WinDriver開發PDA的驅動程式,來連結一個既定的設備,例如:攝影機、USB modem,
此時Jungo提供的另一種解決方案DriverCore則可以滿足您的需求,更多資訊請參考http://www.jungo.com/st/drivercore/drivercore_class_drivers.html。
Q : 若欲在同時間使用兩個以上相同的設備,而該設備的廠商ID與設備ID皆相同,WinDriver 驅動程式開發工具是否亦可支援?
Q: 目前我有個設備已經內附現有的驅動程式,但我又再度利用WinDriver開發此設備的驅動程式並且生成INF檔案,請問我該如何移除此INF檔案讓此設備正常運行?
1. 請在裝置管理員裡找尋該裝置 → 點擊右鍵 → 選取裝置進階選項 → 選擇卸載驅動程式,移除「windrvr6.sys」驅動程式。
2. 執行C:\WinDriver\uninstall.exe,以移除WinDriver資料夾
3. 安裝原有的現有驅動程式,即可正常使用該裝置。
Q:若利用WinDriver來生成USB2.0介面的攝影機驅動程式,仍是無法順利截取該攝影機的畫面,而當我想要重新設定攝影機的相關驅動設定時,
發現WinDriver奪取主控權,應如何解決?
在作業系統開發時,已經包含了很多種的標準化驅動程式,因此在此案例中,WinDriver產生的驅動程式是無法正常使用的。
Q:我欲使用WinDriver開發一個PCI卡的驅動程式來傳輸圖像,但是當我利用WinDriver進行Virtex5 FPGA進行讀取和寫入動作時,電腦會當機,請問如何解決?
請同時提供CPU類型、作業系統類型,應用程式等資料。若是因為應用程式當機而非作業系統當機,請提供WinDriver的Debug monitorLog資料,請參閱
http://www.jungo.com/st/support/tech_docs/td12.html。