Linux下USB裝置自動復位的軟體實現

2021-09-22 21:25:19 字數 1809 閱讀 7974

在做sdr專案的時候由於韌體版本原因,每次使用完之後都需要重新插拔一下usb介面才能恢復正常。實際生成環境中肯定不能容忍這種情況發生,所以需要實現一種檢測到usb裝置異常後能夠自動復位的功能

先找資料,去網上搬磚

再拿來直接用,在使用過程中找出不足之處

對缺點進行改進,形成通用庫並進行發布

google了一些資料,發現網上有許多現成的**,而且也是可以用的。不過有很大的問題在於需要手動去查詢usb裝置的各種引數。

問題的關鍵就在於:如何獲取usb的引數

dmesg可以檢視usb裝置的詳細情況

lsusb可以檢視當前系統已經連線的usb裝置情況

通過上述兩個命令是可以得到usb bus number 和 device number這兩個關鍵引數的

最終的解決方案就是,通過指令碼得到相關cmd命令的輸出,然後進行文字分析和正規表示式匹配,得到關鍵引數後提供給已有usb復位**,實現usb裝置的復位。

舉例說明:

[19716.055236] usb 1-2: usb disconnect, device number 18

[19716.317559] usb 2-2: new superspeed usb device number 13 using xhci_hcd

[19716.338361] usb 2-2: lpm exit latency is zeroed, disabling lpm.

[19716.339434] usb 2-2: new usb device found, idvendor=2500, idproduct=0020

[19716.339441] usb 2-2: new usb device strings: mfr=1, product=2, serialnumber=3

[19716.339445] usb 2-2: product: usrp b200

[19716.339449] usb 2-2: manufacturer: ettus research llc

[19716.339452] usb 2-2: serialnumber: 3107336

可知usrp b200的bus number = 2, device number = 13

2. cmd line輸入:lsusb

bus 002 device 013: id 2500:0020  

bus 002 device 001: id 1d6b:0003 linux foundation 3.0 root hub

bus 001 device 005: id 0cf3:e007 atheros communications, inc. 

bus 001 device 004: id 0bda:0129 realtek semiconductor corp. rts5129 card reader controller

bus 001 device 003: id 0bda:5689 realtek semiconductor corp. 

bus 001 device 002: id 046d:c077 logitech, inc. m105 optical mouse

bus 001 device 001: id 1d6b:0002 linux foundation 2.0 root hub

可進一步確認002/013兩個引數

修改了網上已有usb復位**,使得可以通過模糊欄位來自動獲取復位所需的usb引數,從而達到全自動的功能。便於工程應用。

缺點在於復位邏輯是有缺陷的,實際上該**只能復位最新的記錄。在很複雜的情況下很有可能會失敗。

稍等。。。

Linux下USB裝置檢測

usb裝置檢測也是通過 proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在 proc bus usb目錄,若不存在則嘗試插入usb橋接模組。現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定插...

Linux下USB裝置檢測

usb裝置檢測也是通過 proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠 正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在 proc bus usb目錄,若不存在則嘗試插入usb橋接模組。現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定...

Linux下USB裝置檢測

usb裝置檢測也是通過 proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在 proc bus usb目錄,若不存在則嘗試插入usb橋接模組。現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定插...