Linux device driver 如何识别多个USB声卡

Linux device driver 如何识别多个USB声卡,linux-device-driver,alsa,Linux Device Driver,Alsa,我有一台带有usb集线器和多个usb声卡的Linux计算机 以下是使用aplay-l命令可以看到的内容: aplay -l **** Liste des Périphériques Matériels PLAYBACK **** carte 0: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA] Sous-périphériques: 8/8 Sous-périphérique #0: subdevice #

我有一台带有usb集线器和多个usb声卡的Linux计算机

以下是使用aplay-l命令可以看到的内容:

aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA]
  Sous-périphériques: 8/8
  Sous-périphérique #0: subdevice #0
  Sous-périphérique #1: subdevice #1
  Sous-périphérique #2: subdevice #2
  Sous-périphérique #3: subdevice #3
  Sous-périphérique #4: subdevice #4
  Sous-périphérique #5: subdevice #5
  Sous-périphérique #6: subdevice #6
  Sous-périphérique #7: subdevice #7
carte 0: ALSA [bcm2835 ALSA], périphérique 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 1: Device [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 2: Device_1 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 3: Device_2 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 4: Device_3 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
所以,我有5个设备,用这个名称来标识:ALSA,设备,设备1,设备2,设备3

我的问题是:如何确保每次启动计算机时设备_2都与相同的USB声卡匹配? 你认为计算机启动时匹配可能是随机的吗? 声卡中没有唯一的标识符,所以我想知道内核是如何进行匹配的


感谢

设备路径基本上定义了卡插入的USB端口。运行
ls-la/sys/class/sound/
列出卡及其设备路径,然后将新名称写入卡的
id
属性。(使用“设备路径”重命名每张卡。)

例如:

$ ls -la /sys/class/sound/
total 0
drwxr-xr-x  2 root root 0 May 27 17:48 .
drwxr-xr-x 34 root root 0 May 27 17:48 ..
lrwxrwxrwx  1 root root 0 May 27 17:48 card1 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card1
lrwxrwxrwx  1 root root 0 May 27 17:48 card2 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card2
lrwxrwxrwx  1 root root 0 May 27 17:48 card3 -> ../../devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card3
lrwxrwxrwx  1 root root 0 May 27 17:48 card4 -> ../../devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card4
...
给出4个设备路径。索引可能不同,但设备路径不会更改,直到您将卡插入其他USB端口

使用以下设备路径设置新名称:

echo -n NewName1 > /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card*/id
echo -n NewName2 > /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card*/id
echo -n NewName3 > /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card*/id
echo -n NewName4 > /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card*/id
这也将更改
cat/proc/asound/cards
aplay-l
输出中的名称

您可以定义规则,以便在检测到设备时自动设置这些名称。对于udev,写入
/etc/udev/rules.d/70我的声卡。rules
类似于:

ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card?", ATTR{id}="NewName1"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card?", ATTR{id}="NewName2"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card?", ATTR{id}="NewName3"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card?", ATTR{id}="NewName4"
(别忘了在那里写下您的卡名和设备路径)


然后使用这些名称引用软件中的卡,如“plughw:NewName4”、“dmix:NewName2”…

请参阅上的“识别两个相同的音频设备”。如果我理解这是USB端口标识符,它位于映射的原点?该页面讨论如何“根据设备连接的端口更改其ID”如果我不接触此配置文件的任何内容,我将始终具有相同的映射?谢谢;卡的号码是随机的,这取决于哪个设备首先应答。你救了我的命!非常感谢!:)