Linux libusb開發使用者USB無驅通訊

2021-08-08 11:18:07 字數 2219 閱讀 3860

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 ...