LibUSB-Win32 在Windows7上使用vs2010編譯過程 LibUSB-Win32 在Windows7上使用vs2010編譯過程

LibUSB-Win32 在Windows7上使用vs2010編譯過程

本文摘錄於:https://blog.csdn.net/buaalei/article/details/45722859這裏只是備份,絕無抄襲之意!

LibUSB-Win32是一個用於Windows操作系統(Win98SE、WinME、Win2k和WinXP、Vista、Win7等)上的通用USB設備驅動程序。該驅動程序允許使用者在不寫任何一行核心驅動程序代碼的情況下,可以訪問Windows系統上的任意一個USB設備,具有以下特點:

Ø  能夠與任意一個已安裝的USB設備進行通信

Ø  可被用作自己開發的USB設備的驅動程序

Ø  支持批量和中斷傳輸

Ø  支持USB規範中定義的所有標準設備請求

Ø  支持USB設備製造商的自定義請求

通過使用幾個函數,就可以與USB設備進行簡單通信了,通信的主要流程可分爲以下四步:

1) 調用usb_init函數,進行初始化。

2) 打開要進行通信的USB設備的句柄。首先依次調用usb_find_busses、usb_find_devices和usb_get_busses這三個函數,獲得已找到的USB總線序列;然後通過鏈表遍歷所有的USB設備,根據已知的要打開USB設備的ID(VID/PID),找到相應的USB設備;最後調用usb_open函數打開該USB設備(在這裏假設總線上沒有相同VID和PID的USB設備。如果總線上存在着相同VID和PID的設備,還需要進行其他條件判斷,比如設備名稱,以保證是打開的是期望的USB設備)。

3) 與USB設備進行通信。使用usb_control_msg函數,向USB設備讀取數據或寫入數據。

4) 關閉USB設備。完成所有操作後,調用usb_close函數關閉已經打開的USB設備。

編譯工具:VS2010和WINDDK,可以去官網上直接下載源碼,地址是http://sourceforge.net/projects/libusb-win32/files/,下載的最新版本爲libusb-win32-src-1.2.6.0。VS2010用來編譯libusb-win32的動態鏈接庫、相關工具和DEMO程序的。我們還需要WINDDK來編譯驅動,即生成libusb0.sys文件。從官方提供的make.cfg文件上來看,使用的是WINDDK 7600.16385.0(WINDOW XP及以上版本) WINDDK 6001.18002(WINDOWS 2000及以下版本)。此處用的是 WINDDK 7600.16385.1,打開源碼中的工程文件如下圖所示:


 inf-wizard——設備驅動安裝信息文件生成嚮導。此嚮導可以掃描計算機上的USB設備,並可以獲取你選擇的設備的VID及PID生成inf文件。


install-filter——filter驅動安裝。

libusb-dll——動態鏈接庫,生成libusb0.dll。上面說的“7個函數”就封裝在這裏面。同時生成了libusb0.lib文件,供程序鏈接,實現libusb0.dll的裝載。

libusb-sys——USB驅動,生成驅動文件libusb0.sys。注意它是makefile項目。

testbulk——libusb-win32的 ”Hello,World!“。

testlibusb——實現libusb-win32驅動的設備的遍歷並打印一部分設備描述信息。

testlibusb-win——WINFORM版的testlibusb。

編譯工程,沒有報錯,但libusb-sys生成目錄下也沒有libusb0.sys文件,libusb-sys是靠WINDDK來編譯鏈接的。

查看libusb-sys的項目屬性頁,在[配置屬性]的欄裏,查看“生成命令行”。

CD"$(ProjectDir)..\ddk_make"

CMD /C make.cmd"arch=x86" "app=driver" "noclean=true""outdir=$(OutDir)" "DIR_INTERMEDIATE=$(IntDir)""debugmode=true"

查看目錄下的make.cfg文件。

; Default WinDDKdirectory(s) Adjust these values to match your environment

; (REQUIRED)

WINDDK_BASE=Z:\WinDDK

WINDDK_DIR=!WINDDK_BASE!\7600.16385.0\

;

; (optional)

WINDDK_W2K_DIR=!WINDDK_BASE!\6001.18002\

 

把這兩項改成你的WINDDK安裝路徑。

; Default WinDDKdirectory(s) Adjust these values to match your environment

; (REQUIRED)

WINDDK_BASE=D:\WinDDK

WINDDK_DIR=!WINDDK_BASE!\7600.16385.1\

編譯一下libusb-sys。

編譯報錯error MSB3073: ,修改ddk_make/make.cmd,Line175 W2K(末尾) 修改成WIN7,編譯成功。

然後編譯libwdi,老是報錯error MSB3073,網上查了半天資料都沒有解決辦法,最終找到問題原因,所包含的文件沒有放置在對應位置。

從編譯的libusb-win32-src-1.2.6.0(可以從http://sourceforge.net/apps/trac/libusb-win32/wiki下載)中複製對應文件到E:/libusb-win32,注意目錄是E:\libusb-win32\bin\x86,對應修改config.h的目錄路徑如下:

/* embed WinUSB driver files from thefollowing DDK location */

#ifndef DDK_DIR

#define DDK_DIR"D:/WinDDK/7600.16385.1"

#endif

/* embed libusb0 driver files from thefollowing location */

#ifndef LIBUSB0_DIR

#define LIBUSB0_DIR"E:/libusb-win32"

#endif

然後inf-wizard工程編譯又出現問題,error LNK2019: 無法解析的外部符號,通過添加編譯生成的libwdi .lib到工程路徑中即可解決,最終編譯完成整個項目。


編譯過程參考如下文章:

http://www.amobbs.com/archiver/tid-4096300.html

http://blog.csdn.net/hbsong75/article/details/12841301

http://m.blog.csdn.net/blog/whw8007/38895073


發佈了244 篇原創文章 · 獲贊 138 · 訪問量 95萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章