2017-04-12 34 views
0

我有一臺帶有USB集線器和多個USB聲卡的Linux計算機。如何識別多個USB聲卡

這裏是我可以用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,設備,DEVICE_1,設備_2,Device_3

我的問題是:如何確保Device_2每次啓動計算機時都能與相同的USB聲卡相匹配? 您認爲計算機啓動時匹配可能是隨機的嗎? 聲卡內部沒有唯一標識符,所以我想知道內核如何進行匹配。

謝謝

+0

請參閱http://alsa.opensrc.org/Udev上的「確定兩個相同的音頻設備」。 –

+0

如果我明白這是在映射的起源的USB端口標識符? – Bob5421

+0

該頁面將討論如何「根據設備連接的端口來更改其ID」。 –

回答

0

使用「設備路徑」重命名每張卡。設備路徑基本上定義了該卡插入哪個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-設備pathes。索引可能有所不同,但設備路徑不會改變,直到您將該卡插入其他USB端口。

使用這些設備pathes設置新的名稱:

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/cardsaplay -l輸出更改名稱。

您可以定義規則以在檢測到設備時自動設置這些名稱。 udev的寫/etc/udev/rules.d/70-my-sound-cards.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" 

(不要忘了寫卡名稱和設備pathes那裏)

然後使用這些名稱來引用卡在你的軟件,例如「plughw:NewName4」,「dmix:NewName2」...