동일한 USB 사운드 카드는 재부팅할 때마다 동일한 장치 이름을 갖습니다.

동일한 USB 사운드 카드는 재부팅할 때마다 동일한 장치 이름을 갖습니다.

두 개의 라이브 녹화 채널을 스트리밍하기 위해 Debian 10, Darkice 및 Icecast를 사용하여 스트리밍 서버를 구축하고 싶습니다.

사운드 카드는 두 개의 Behringer UCA202이며 항상 시스템의 동일한 물리적 USB 포트에 연결됩니다. 하나는 위쪽 USB 포트이고 다른 하나는 아래쪽 USB 포트라고 가정해 보겠습니다.

확인할 때믹서-l사운드 카드 중 하나의 이름은 CODEC이고 다른 하나의 이름은 CODEC_1입니다. Darkice의 구성 파일에 해당 채널 정보를 입력하고 Icecast에 마운트 지점을 할당할 수 있습니다.

따라서 현재 다음과 같은 구성이 있습니다.

위의 USB 카드 -> 이름은 CODEC -> Icecast의 마운트 지점 stream1

하단 USB의 카드 -> 이름은 CODEC_1 -> Icecast의 마운트 지점 stream2입니다.

문제는 재부팅 후 장치 검색 특성으로 인해 사운드 카드의 이름이 전환되는 경우가 있다는 것입니다. CODEC은 CODEC_1이 되고 그 반대도 마찬가지입니다. 이런 일이 발생하면 마운트 지점의 스트림도 전환되며 stream1은 잘못된 사운드 카드에서 나옵니다.

이제 코덱이 항상 사운드 카드의 USB 포트에 있도록 매번 동일한 이름을 할당하려면 어떻게 해야 합니까? 어쩌면 일종의 udev 규칙일까요?

요청에 따라 udevadm info -ap /sys/ 출력을 추가했습니다.

여기서 우리는 출력합니다.udevadm 정보-ap /sys/class/sound/controlC0

  looking at device '/devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card0/controlC0':
    KERNEL=="controlC0"
    SUBSYSTEM=="sound"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card0':
    KERNELS=="card0"
    SUBSYSTEMS=="sound"
    DRIVERS==""
    ATTRS{id}=="CODEC_1"
    ATTRS{number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0':
    KERNELS=="3-2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="snd-usb-audio"
    ATTRS{bInterfaceClass}=="01"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bNumEndpoints}=="00"
    ATTRS{bInterfaceSubClass}=="01"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3/3-2':
    KERNELS=="3-2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{busnum}=="3"
    ATTRS{rx_lanes}=="1"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="2"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{maxchild}=="0"
    ATTRS{configuration}==""
    ATTRS{tx_lanes}=="1"
    ATTRS{bcdDevice}=="0100"
    ATTRS{product}=="USB Audio CODEC "
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{speed}=="12"
    ATTRS{idVendor}=="08bb"
    ATTRS{bmAttributes}=="80"
    ATTRS{devnum}=="3"
    ATTRS{authorized}=="1"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{idProduct}=="2902"
    ATTRS{version}==" 1.10"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{manufacturer}=="Burr-Brown from TI              "
    ATTRS{urbnum}=="1331512"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3':
    KERNELS=="usb3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{serial}=="0000:00:1a.1"
    ATTRS{urbnum}=="89"
    ATTRS{idProduct}=="0001"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{configuration}==""
    ATTRS{busnum}=="3"
    ATTRS{devnum}=="1"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{rx_lanes}=="1"
    ATTRS{devpath}=="0"
    ATTRS{speed}=="12"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bDeviceClass}=="09"
    ATTRS{removable}=="unknown"
    ATTRS{product}=="UHCI Host Controller"
    ATTRS{version}==" 1.10"
    ATTRS{bcdDevice}=="0419"
    ATTRS{authorized_default}=="1"
    ATTRS{authorized}=="1"
    ATTRS{tx_lanes}=="1"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{idVendor}=="1d6b"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{maxchild}=="2"
    ATTRS{quirks}=="0x0"
    ATTRS{manufacturer}=="Linux 4.19.0-5-amd64 uhci_hcd"
    ATTRS{bMaxPower}=="0mA"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1':
    KERNELS=="0000:00:1a.1"
    SUBSYSTEMS=="pci"
    DRIVERS=="uhci_hcd"
    ATTRS{ari_enabled}=="0"
    ATTRS{driver_override}=="(null)"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{device}=="0x2835"
    ATTRS{msi_bus}=="1"
    ATTRS{subsystem_device}=="0x2808"
    ATTRS{broken_parity_status}=="0"
    ATTRS{local_cpulist}=="0-1"
    ATTRS{irq}=="21"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{class}=="0x0c0300"
    ATTRS{numa_node}=="-1"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{vendor}=="0x8086"
    ATTRS{revision}=="0x02"
    ATTRS{enable}=="1"
    ATTRS{local_cpus}=="3"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

이것이 출력이다udevadm 정보-ap /sys/class/sound/controlC1

  looking at device '/devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card1/controlC1':
    KERNEL=="controlC1"
    SUBSYSTEM=="sound"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card1':
    KERNELS=="card1"
    SUBSYSTEMS=="sound"
    DRIVERS==""
    ATTRS{id}=="CODEC"
    ATTRS{number}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0':
    KERNELS=="3-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="snd-usb-audio"
    ATTRS{bInterfaceClass}=="01"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bNumEndpoints}=="00"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceSubClass}=="01"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3/3-1':
    KERNELS=="3-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{tx_lanes}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{speed}=="12"
    ATTRS{product}=="USB Audio CODEC "
    ATTRS{version}==" 1.10"
    ATTRS{bcdDevice}=="0100"
    ATTRS{busnum}=="3"
    ATTRS{ltm_capable}=="no"
    ATTRS{devnum}=="5"
    ATTRS{configuration}==""
    ATTRS{devpath}=="1"
    ATTRS{manufacturer}=="Burr-Brown from TI              "
    ATTRS{quirks}=="0x0"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{authorized}=="1"
    ATTRS{rx_lanes}=="1"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{maxchild}=="0"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{urbnum}=="62"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="2902"
    ATTRS{idVendor}=="08bb"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1/usb3':
    KERNELS=="usb3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{manufacturer}=="Linux 4.19.0-5-amd64 uhci_hcd"
    ATTRS{idVendor}=="1d6b"
    ATTRS{devnum}=="1"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{product}=="UHCI Host Controller"
    ATTRS{ltm_capable}=="no"
    ATTRS{rx_lanes}=="1"
    ATTRS{removable}=="unknown"
    ATTRS{maxchild}=="2"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bcdDevice}=="0419"
    ATTRS{busnum}=="3"
    ATTRS{serial}=="0000:00:1a.1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{idProduct}=="0001"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bmAttributes}=="e0"
    ATTRS{authorized}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{speed}=="12"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{devpath}=="0"
    ATTRS{configuration}==""
    ATTRS{urbnum}=="89"
    ATTRS{version}==" 1.10"
    ATTRS{tx_lanes}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1a.1':
    KERNELS=="0000:00:1a.1"
    SUBSYSTEMS=="pci"
    DRIVERS=="uhci_hcd"
    ATTRS{local_cpulist}=="0-1"
    ATTRS{driver_override}=="(null)"
    ATTRS{irq}=="21"
    ATTRS{revision}=="0x02"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0300"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{enable}=="1"
    ATTRS{subsystem_device}=="0x2808"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{local_cpus}=="3"
    ATTRS{ari_enabled}=="0"
    ATTRS{msi_bus}=="1"
    ATTRS{vendor}=="0x8086"
    ATTRS{numa_node}=="-1"
    ATTRS{device}=="0x2835"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

답변1

제공된 udevadm 정보를 기반으로 다음 명령을 사용하여 2개의 장치 ID 이름을 일시적으로 바꿀 수 있습니다.

echo 'CODEC_A' | sudo tee /devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card1/id 

echo 'CODEC_B' | sudo tee /devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card0/id

새 별칭 ID 이름이 다음에 나타나야 합니다.

cat /proc/asound/cards

udev 규칙의 경우 "card0" 또는 "card1"을 "card?"로 바꾸면 udev에서 할당한 카드 ID가 카드 인덱스 번호를 무시하고 USB 연결에만 기반을 두게 됩니다.

DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card?", ATTR{id}="CODEC_A"

DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card?", ATTR{id}="CODEC_B"

이에 대한 자세한 내용을 보려면 다음 사이트를 방문하세요.https://alsa.opensrc.org/Udev

답변2

내 대답

Udev 규칙은 겉으로는 구별할 수 없는 장치를 대상으로 합니다.

도움이 될 수도 있습니다. 식별해야 할 동일한 카메라가 4개 있습니다.

관련 정보