2015-10-15 152 views
4

如何在Linux中正確獲取USB設備文件路徑。 我用命令:find/-iname 「USB」,並得到如下結果:確定USB設備文件路徑

/dev/bus/usb 
/sys/bus/usb 
/sys/bus/usb/drivers/usb 
/sys/kernel/debug/usb 

下的/ dev /巴士/ USB我看到:

001 002 003 004 005 006 

但我認爲他們都沒有我需要的文件。

在/ sys /總線/ USB /設備/:

sh-3.2# ls /sys/bus/usb/devices/ 
1-0:1.0 1-1:1.0 3-0:1.0 5-0:1.0 usb1  usb3  usb5 
1-1  2-0:1.0 4-0:1.0 6-0:1.0 usb2  usb4  usb6 

而且在/ sys /總線/ SCSI /設備/當我pluged的USB我看到:

2:0:0:0  host0  host2  target2:0:0 

當我刪除了USB我看到:

sh-3.2# ls 
host0 

那麼哪個設備文件用於USB?我如何識別它?我需要用USB設備文件製作一個C程序...

此外,您能否向我解釋數字1-1:1.0?這是什麼意思?

謝謝。

+0

你需要什麼設備文件? –

+1

我需要檢查這關係到USB設備的信息。 所以我想我會送ioctl來USB設備文件和讀取反饋數據?這可能嗎? – Tiktac

+0

什麼樣的信息? –

回答

6

那麼哪個設備文件用於USB?我如何識別它?

您在/sys/後面看到的內容主要是關於設備的配置/信息。 /dev/bus/usb是你在找什麼。我想,下面的文章可以幫助你

http://www.linuxjournal.com/article/7466?page=0,0

是很老,但仍可以幫助您。 (在他們談論/proc/bus/usb的文章,今天我們就/dev/bus/usb

更進一步,你能不能給我解釋一下人數1-1:1.0?這是什麼意思?

一般形式是

X-Y.Z:A.B 

每場識別設備的連接點。前兩個字段是必填字段:

  • X是您的主板的USB總線,連接USB系統。
  • Y是在總線系統

上使用的端口所以用字符串3-3識別的USB設備如果連接了USB連接總線3

的端口3設備集線器,您正在擴展單個USB端口的連接能力。 Linux內核通過追加Z字段來識別這種情況。

  • Z是端口上的輪轂

因此,使用,以字符串1-2.5識別的USB設備是連接連接到總線的端口2上的輪轂的端口5上的裝置1.

USB規範允許你在級聯連接更多然後一個USB集線器,所以Linux內核繼續追加在端口上使用不同的集線器。因此,用字符串1-2.1.1標識的USB設備是連接在連接到總線1的端口2的集線器的端口1上的集線器的端口1上的設備。

快速檢索這些信息的方法是讀取內核消息(如果可以的話)。

$ dmesg | grep usb 
[... snip ...] 
[ 2.047950] usb 4-1: new full-speed USB device number 2 using ohci_hcd 
[ 2.202628] usb 4-1: New USB device found, idVendor=046d, idProduct=c318 
[ 2.202638] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 
[ 2.202643] usb 4-1: Product: Logitech Illuminated Keyboard 
[ 2.202648] usb 4-1: Manufacturer: Logitech 
[... snip ...] 

然後,該模式的最後兩個字段(冒號之後)識別USB設備的內部部分:

  • A是裝置的配置數
  • B是接口一個配置的編號

所以,字符串4-1:1.1表示:接口1,在配置1上連接在總線4的端口1上。

可以檢索與命令lsusb這些信息。

+0

這對我很有幫助。 但我仍然不知道哪個文件可以發送USB ioctl到它來獲取一些信息... – Tiktac

+0

也許你應該看看libusb。它會爲你抽取大部分工作。 –

+0

正如我在答案中所寫,'/ dev/bus/usb'是你必須查看的目錄。哪個文件*完全*?這取決於您連接USB設備的位置。這是在文章和答案中解釋。然後如亞歷山大所說,並通過文章建議,使用'libusb' – Federico