WinXP下USB驅動開發 四

2021-05-13 02:33:15 字數 3002 閱讀 5151

該任務主要包括上位機

usb驅動開發、

lpc2440

下位機程式開發、除錯三部分。其中

lpc2440

下位機程式開發部分已經完成,不需要再行設計和開發。因此接下來的任務主要由上位機

usb

驅動開發和除錯兩部分構成。嚴格來說除錯又分檢測軟體的編寫和整體除錯兩部分。因此我們的設計工作主要如下幾部分(圖

3-1-1)。

概要設計如下:

上位機usb

驅動設計:採用

wdm驅動設計模式開發,遵循嚴格的

usb2.0

規範,實現即插即用、資料傳輸等驅動功能。為提高驅動的穩定性和傳輸資料的準確性,在

usb驅動編寫階段加入過慮驅動,主要實現傳輸的資料過慮、剔除異常資料,同時為支援多電源狀態,在編碼階段還需加入了電源管理模組,提高

usb驅動的適應性和穩定性。

usb驅動安裝也是該部分設計的需要的注意的問題,由於採用

wdm模式進行設計,因此我們採用編寫

inf檔案、手動安裝。

檢測軟體設計:採用

microsoft visual c++ 6.0

編寫,主要實現

usb資料傳輸等功能,方便與最後的整體除錯。

整體除錯:該部分主要包括

windbg

除錯和檢測軟體除錯兩部分。該整體除錯採用白盒測試,對所有的功能或這特功能進行一一檢測,並與測試用例結果對比。在測試當中,用例的選擇採用邊緣化資料和區域性資料雙重測試,保證測試的準確性。

windows

驅動程式模型

(windows driver model

,wdm)

是一種模型結構,它建立在物理裝置物件

(physical device object

,pdo)

和功能裝置物件

(functional device object

,fdo)

的結構化分層基礎上。

wdm模型為了適應即插即用系統,重新定義了驅動程式分層,它至少存在匯流排驅動程式和功能驅動程式,根據需要還可以選擇過濾器驅動程式。通常情況下,連線到匯流排的每個物理部件都有乙個

pdo,承擔由硬體實現的低階裝置控制的責任。更高階軟體則都存在乙個

fdo。當存在

ipo

操作時,

irp

請求包( ipo request packet)

首先被送到上級過濾器驅動程式,然後被一級一級的往下傳遞

,最後由匯流排驅動程式完成對裝置的操作。

usb

系統驅動程式採用

wdm結構

,具體結構如圖

3-2-1

所示。其中裝置驅動程式位於整個結構的最頂層,它不直接操作硬體

,而是通過

usbd

介面傳遞請求。

window

下usb

驅動開發主要分驅動程式,安裝和除錯幾個方面進行設計。其中程式設計相對複雜,包括對

usb資料結構、

wmi、電源管理、

pnp等進行分析和設計。安裝和除錯相對簡單,安裝階段主要的任務是編寫配置檔案

( .inf)

,除錯階段的任務主要針對驅動的讀寫進行測試,如果讀寫成功,說明驅動執行正常。

微軟提供的

ddk只是乙個編譯環境,只能在

cmd中進行輸入

build

進行除錯,這種除錯凡是特別不方便,

cmd除錯的錯誤結果只能顯示**的行號,無法做到錯誤適時定位。其實在實際的驅動開發過程當中已經很少在

cmd中除錯了,大多數的程式設計師都是採用

vc++6.0

開發環境來進行除錯的。

vc++6.0

本身並未

windows

驅動的除錯環境,需要自己手動配置,如下**構造

vc++6.0

的編譯環境;

一、設定新增新的編譯環境,命名為

driver_check

,操作步驟:

[build]—>[configurations]

如圖3-3-1-0;

二、設定

c/c++

環境,進入

[project]—>[settings]—>c/c++

,然後將想如下**拷貝到

project options

當中。/nologo /gz /mld /w3 /wx /z7 /od /d win32=100 /d _x86_=1 /d winver=0x500 /d dbg=1 /fr"driver_check/" /fo"driver_check/" /fd"driver_check/" /fd /c

三、設定

link

環境,進入

[project]—>[settings]—>link

,然後將想如下**拷貝到

project options

當中。wdm.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"driverentry" /subsystem:console /incremental:no /pdb:"mydriver_check/hellowdm.pdb" /debug /machine:i386 /nodefaultlib /out:"driver_check/hellowdm.sys" /pdbtype:sept /subsystem:native /driver /section:init,d /release /ignore:4078

四、新增相關路徑,進入

[tools]—>[options]—>directories

,將winddk

的相關檔案路徑新增到其中,並置頂,如下**。

通過以上的步驟,設定

vc++6.0 ddk

的編譯環境基本完成。然而、對於

usb的開發還需要在

link

中加入wmilib.lib hidclass.lib usbd.lib ntoskrnl.lib

這幾個鏈結庫。

WINCE下的USB驅動開發

首先usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...

WINCE下的USB驅動開發

首先usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...

usb驅動開發

果你是從硬體開始來設計整個的系統,你還要正確選擇傳送的方式,而作為乙個驅動程式的書寫者,就只需要弄清楚他是採用的什麼工作方式就行了。控制 control 方式傳送 控制傳送方 式可以包括8 16 32和64位元組的資料,這依賴於裝置和傳輸速度。usb裝置驅動開發 usb gadget driver ...