當前位置:編程學習大全網 - 編程語言 - 如何解決Linux下USB設備節點名不固定的問題

如何解決Linux下USB設備節點名不固定的問題

經常遇到Linux下USB設備節點名不固定的問題,以下是解決方法:

以USB轉串口為例。通常設備節點名為ttyUSBx(x為0 ~ n),Linux內核會根據插入設備的順序進行編號。例如,第壹個插入的設備的編號為0,然後相應地添加1。

如果只用設備節點ttyUSBn來區分是哪個設備,會造成混淆,因為最後壹位的數字會隨時變化。不能保證設備A是0,設備B是1。其實這個問題在LDD3裏面已經提到了,目前的內核已經解決了類似的問題,會把所有的USB設備都引到sys文件系統。其實每個USB口都有唯壹的端口號,相當於每個店的門牌號。只要我們根據端口號來區分設備,問題就解決了。

例如,當前設備插入兩個USB轉串行設備後,檢查ttyUSBn所在端口的端口號:

root @ Android:/$ ls-l/sys/class/tty/

...

lrwxrwxrwx root root 2011-01-01 13:40 ttyusb 0-& gt;../../devices/ff 540000 . USB/USB 3/3-1/3-1.1/3-1.1:1.0/ttyusb 0/tty/ttyusb 0

lrwxrwxrwx root root 2011-01-01 13:43 ttyusb 1->../../devices/ff 540000 . USB/USB 3/3-1/3-1.2/3-1.2:1.0/ttyusb 1/tty/ttyusb 1

root@android:/ $ 12345

ttyUSB0的端口號為3-1.1,ttyUSB1的端口號為3-1.2。

其他類型的USB設備也是如此,以上思路已經清理完畢。

檢查系統當前的usb設備,下面是第二列排序的結果。

$ lsusb

總線001設備001:ID XXX:XXX Linux Foundation 2.0根集線器

總線001設備002: ID xxx:xxx英特爾公司集成速率匹配中樞

總線001設備003: ID xxx:xxx Genesys Logic,Inc. GL827L SD/MMC/MS閃存卡讀卡器

總線001設備005: ID xxx:xxx飛利浦(或恩智浦)

總線002設備001:ID XXX:XXX Linux Foundation 2.0根集線器

總線002設備002: ID xxx:xxx英特爾公司集成速率匹配中樞

總線002設備003: ID xxx:xxx英特爾公司

總線003設備001:ID XXX:XXX Linux Foundation 2.0根集線器

總線004設備001:ID XXX:XXX Linux Foundation 3.0根集線器

第二列是usb設備的集線器號。pc中的usb設備連接到集線器。即使妳的主板提供了很多usb口,實際上也是連接到集線器的。

第四列是usb設備的序列號和本機設備的序列號。

所以以上信息顯示有四個usb hub(3個(三個usb2.0,壹個usb3.0)。如果

粗體字,我的機器上有三個設備,001.003是機箱自帶的讀卡器,001.005是無線鍵盤,002.003是intel無線網卡的藍牙模塊(詳見下文)。

Usb設備也可以在內核文件/sys/bus/usb/devices中找到。Linux將所有設備驅動程序映射到/sys。

ls-1/sys/bus/USB/devices/

1-0:1.0

1-1

1-1:1.0

1-1.2

1-1.2:1.0

1-1.4

1-1.4.1

1-1.4:1.0

1-1.4.1:1.0

1-1.4.1:1.1

1-1.4.1:1.2

1-1.5

1-1.5:1.0

1-1.5:1.1

1-1.5:1.2

2-0:1.0

2-1

2-1:1.0

2-1.5

2-1.5:1.0

2-1.5:1.1

3-0:1.0

4-0:1.0

usb1

usb2

usb3

usb4

都是符號連接妳也可以用ls -l /sys/bus/usb/devices/

輸出看起來很混亂。使用udevadm工具可以清楚地列出設備信息。該命令如下所示:

udevadm info-p/sys/bus/USB/devices/USB 1-q屬性

那麽我們如何找出它是哪壹個usb設備呢?

總線002設備003: ID xxx:xxx英特爾公司

第二列002應該可以在所有從2開始的文件中找到,接下來的壹列符合第壹條規則。

2-0:1.0

2-1

2-1:1.0

2-1.5

2-1.5:1.0

2-1.5:1.1

通常情況下,系統的usb hub占據負號後的第壹個0。第壹個2-0:1.0是usb hub。

2-1.5*檔就是以上設備。

$ udevadm info-p/sys/bus/USB/devices/2-1.5-q屬性

BUSNUM=002

DEVNAME=/dev/bus/usb/002/003

DEVNUM=003

............

ID_MODEL_ID=xxx

............

ID_VENDOR=xxx

............

ID _ VENDOR _ FROM _ DATABASE = Intel corp

............

002和003是lsusb的2/4和6列,來自modelID和vender。

lsusb裏的東西就是這麽來的。

問題是,妳怎麽知道是藍牙?答案是繼續向udevadm查詢:

$ udevadm info-p/sys/bus/USB/devices/2-1.5:1.0-q屬性

ID _ USB _ CLASS _ FROM _ DATABASE =無線

ID _ USB _協議_ FROM _數據庫=藍牙

ID _ USB _ SUBCLASS _ FROM _ DATABASE =射頻

ID _ VENDOR _ FROM _ DATABASE = Intel corp

  • 上一篇:比爾蓋茨的傳說故事
  • 下一篇:csgo控制臺壹樣的指令如果輸入了好多遍會怎麽樣
  • copyright 2024編程學習大全網