如何解决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 ttyUSB0 -> ../../devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1:1.0/ttyUSB0/tty/ttyUSB0
lrwxrwxrwx root root 2011-01-01 13:43 ttyUSB1 -> ../../devices/ff540000.usb/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1
root@android:/ $
其中ttyUSB0
所在的端口号为3-1.1
,而ttyUSB1
所在的端口号为3-1.2
。
其它类型USB设备同理,以上思路清理完毕。
在调试USB Audio设备时,同样遇到了这个问题。记录一下查看USB Audio的方式以及如何区分他们:
tony@tony-E431:~$ cat /proc/asound/cards
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xe4610000 irq 30
1 [Device ]: USB-Audio - USB PnP Audio Device
C-Media Electronics Inc. USB PnP Audio Device at usb-0000:00:14.0-3, full speed
tony@tony-E431:~$ ls -l /sys/class/sound/card1/
total 0
drwxr-xr-x 3 root root 0 10月 31 11:53 controlC1
lrwxrwxrwx 1 root root 0 10月 31 11:53 device -> ../../../3-3:1.0
-rw-r--r-- 1 root root 4096 10月 31 11:53 id
-r--r--r-- 1 root root 4096 10月 31 11:53 number
drwxr-xr-x 3 root root 0 10月 31 11:53 pcmC1D0c
drwxr-xr-x 2 root root 0 10月 31 11:54 power
lrwxrwxrwx 1 root root 0 10月 31 11:53 subsystem -> ../../../../../../../../class/sound
-rw-r--r-- 1 root root 4096 10月 31 11:53 uevent
tony@tony-E431:~$
在NanoPi2上:
root@nanopi2:/ # cat /proc/asound/cards
0 [I2SES8316 ]: I2S-ES8316 - I2S-ES8316
I2S-ES8316
1 [SPDIFTranscieve]: SPDIF-Transciev - SPDIF-Transciever
SPDIF-Transciever
2 [Device ]: USB-Audio - USB PnP Audio Device
C-Media Electronics Inc. USB PnP Audio Device at usb-nxp-ehci-1.1, full speed
root@nanopi2:/ # ls -l /sys/class/sound/card2/
drwxr-xr-x root root 2017-10-31 03:58 controlC2
lrwxrwxrwx root root 2017-10-31 03:58 device -> ../../../1-1.1:1.0
-rw-r--r-- root root 4096 2017-10-31 03:58 id
-r--r--r-- root root 4096 2017-10-31 03:58 number
drwxr-xr-x root root 2017-10-31 03:58 pcmC2D0c
drwxr-xr-x root root 2017-10-31 03:58 power
lrwxrwxrwx root root 2017-10-31 03:58 subsystem -> ../../../../../../../../../class/sound
-rw-r--r-- root root 4096 2017-10-31 03:58 uevent
root@nanopi2:/ #