1、linux下交叉編譯libusb的方法及編譯乙個使用了libusb庫的test程式的方法---- 2、
3、
libusb的使用教程和例子----
4、libusb庫(linux下親測有效)----
專案上需要將乙個自己開發的裝置通過usb介面 連線到linux系統或android系統的裝置,然後通過傳送命令來控制我們的裝置操作。要求做到「即插即用」,不需要再安裝驅動,於是想到用libusb庫來做。
在網上搜尋了一些關於libusb的使用方法,寫篇文章記錄下開發過程,主要解決3個問題:
① libusb是什麼?
② libusb有什麼用?
③ libusb怎麼用?
1. libusb是什麼?libusb有什麼用?
usb驅動是核心態驅動硬體方面的東西; libusb是使用者端程式封裝庫,是usb主機對usb裝置進行操作的函式集合,有了它我們針對某型號usb裝置就不用去修改比較繁瑣的linux核心驅動了,方便了對裝置的使用與除錯。
要使用libusb,需要在linux下安裝、配置libusb環境。可以檢視這篇文章:linux下libusb的安裝與測試
安裝主要分為./configure ->make -> sudo make install
2. libusb怎麼用?
帶著這個問題,找到了這篇文章
:usb裝置開發---- 基於libusb的無驅設計
,不過這篇文章也只是簡單介紹,實際寫程式幫助不大。
那對寫程式幫助最大的資源是什麼呢?無疑是原始碼。於是把 libusb-1.0.9.tar.bz2 庫解壓出來,然後建立乙個sourceinsight工程檢視原始碼。
在 examples/ 下有3個示例程式,檢視 dpfp.c ,然後知道了①用 libusb_init(null);來初始化這個libusb庫;②呼叫 libusb_open_device_with_vid_pid();通過usb裝置的vid、pid來開啟我們的usb裝置;返回乙個struct libusb_device_handle *devh 結構。
既然已經開啟了裝置,按照以前寫驅動程式的步驟,下面就是進行讀寫操作了。但是通過在原始碼中查詢,沒有read()、write()函式。通過研究,原來它是通過transfer來進行傳輸,就是上面的文章中介紹的 控制傳輸、塊傳輸和中斷傳輸來完成。③於是呼叫 libusb_bulk_transfer()來對輸出端點進行資料輸出,但是返回的結果是-1. 再閱讀原始碼,發現在傳輸之前要進行介面確認。④ 呼叫 libusb_claim_inte***ce()確認inte***ce,但返回-6.說是被占用了。再研究,找到了這篇文章:
libusb下,多程式呼叫不同endpoint
⑤被占用了,那就要呼叫 libusb_detach_kernel_driver()先讓inte***ce 與 kernel driver分離。然後再傳輸就成功鳥。
既然要研究這個libusb庫,索性就透徹一點,把網上找到的資料都整理一下,有個深刻的認識:
usb介面遊戲搖桿和按鍵
;文中實現了找到usb匯流排上的裝置,通過比較vid、pid找到要通訊的裝置。然後通過中斷端點進行資料傳輸,當搖桿位置變化或者按鍵按下時,讀取裝置中斷端點值。
該文章中使用的是libusb 0.1版本,現在都使用libusb 1.0版本的。它們之間有啥不同呢?
② 於是找到了這篇文章:
libusb for linux(android) 學習 《二》 使用api1.0 程式設計 ; 它與0.1 版本最明顯的區別是:其function 都比0.1 api 多了個"lib"字首. 這裡的libusb_set_debug()方法比較好用。
說明一下:--build=i686-linux表示該軟體在x86平台上被編譯
--host=arm-linux表示該軟體編譯完成後在arm平台上執行
--prefix後面為軟體安裝目錄
那在andorid平台上怎麼使用libusb呢?
⑤ 可以檢視這篇文章:只需 5 步移植 libusb 到 beagleboard 上的 android
現在android版本上其實已經把這個libusb搞上去了,android 喜歡把所有功能都自己實現一遍 toolbox -> busybox bionic->gcc庫 uevent+vold->udev.
那怎麼操作呢?可以檢視這篇文章:⑥android usb host 讀寫usb裝置
;還有這篇詳細的介紹了操作的步驟和api的使用:⑦ android下的usb host介紹和開發
;還有這篇也不錯:
Linux libusb開發使用者USB驅動程式
libusb是使用者端驅動程式封裝庫,是usb主機對usb裝置進行操作的函式集合,有了它我們針對某型號usb裝置就不用去修改比較繁瑣的linux核心驅動了,方便了對裝置的使用與除錯。我電腦的程式設計環境是ubuntu12.04 geany 一款linux下的整合開發工具,個人感覺挺好用的 接下來分享...
Linux libusb 安裝及簡單使用
ubuntu下最簡單的安裝方法 sudo apt get install libusb dev 也可按照下面的方法,自己編譯,安裝,新手建議使用apt get install 的方法安裝 一 參考文件 1.libusb1 fails do configure task with udev suppo...
團隊開發 典型使用者
典型使用者 名字 韓xx 年齡 22 性別 男 職業 學生 代表的使用者在市場上的比例 學生 使用軟體的典型場景 夜路 床下牆角等陰暗角落 動機目的 照亮 使用者偏好 簡單易操作 使用者比例 典型場景 晚歸 使用者場景 1 背景 1 典型使用者 韓xx 2 使用者的需求 迫切需要解決的問題 韓xx ...