Linux/Udev 오디오 장치 이름 지정 지침

Linux/Udev 오디오 장치 이름 지정 지침

다음 코드가 주어지면:

  struct udev *udev_obj = udev_new();
  struct udev_enumerate *udev_enum = udev_enumerate_new(udev_obj);
  udev_enumerate_add_match_subsystem(udev_enum, "sound");
  udev_enumerate_scan_devices(udev_enum);

  struct udev_list_entry *udev_entries = udev_enumerate_get_list_entry(udev_enum);
  struct udev_list_entry *udev_entry = NULL;
  udev_list_entry_foreach(udev_entry, udev_entries) {
    printf("%s\n", udev_list_entry_get_name(udev_entry));
  }

내 ThinkPad X1 Carbon에는 외부 사운드 주변 장치 출력이 없습니다.

/sys/devices/pci0000:00/0000:00:1f.3/sound/card0
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/hwC0D0
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/hwC0D2
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D0c
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D0p
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D10p
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D3p
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D7p
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D8p
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D9p
/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/controlC0
/sys/devices/virtual/sound/seq
/sys/devices/virtual/sound/timer

제가 알기로는 C0 = 카드 0, D0 = 장치 0, c = 캡처/p = 재생입니다. 하지만:

  1. 차이점이 뭐야카드0/하드웨어/pcm/제어/시퀀스/타이머?
  2. 카드 0, 장치 3, 카드 0, 장치 7 등과 같은 이상한 조합이 왜 그렇게 많이 있습니까? 논리적으로 플러스원은 없는 것 같아
  3. 여기서 상위 장치는 무엇입니까? 어떻게 얻을 수 있나요 libudev?

답변1

1.)

  • card0예를 들어 단일 사운드 카드, 마더보드 통합 사운드 칩 또는 USB 사운드 장치에는 여러 개의 입력 및 출력이 있을 수 있습니다.
  • hw가상 파일은 다음 용도로 사용됩니다.하드웨어 관련기본적으로 사운드 칩 또는 그 특정 부분에 표준 ALSA 인터페이스에서 다루지 않는 추가 기능이 있는 경우 이러한 가상 파일을 통해 이러한 기능에 액세스할 수 있습니다.
  • pcm가상 파일은 사운드 데이터의 실제 입력 및 출력 채널입니다.
  • control채널은 볼륨 설정 및 유사한 "표준" 사운드 카드 제어에 사용됩니다.
  • seq사운드 카드에 MIDI 시퀀서 기능이 있거나 외부 MIDI 악기용 MIDI 인터페이스 또는 timidityALSA와 상호 작용할 수 있는 유사한 소프트웨어 신디사이저가 있는 경우 이 옵션을 사용하십시오.
  • timer이는 다양한 사운드가 조화롭게 재생되도록 준비하고 다른 많은 사운드 관련 작업을 수행할 때 중요합니다. 따라서 ALSA는 오디오 관련 목적에 최적화된 타이머 인터페이스를 제공합니다.

2.) 컴퓨터 마더보드를 설계하는 사람이나 팀만이 이를 결정할 수 있습니다. 그러나 최신 HD-Audio 호환 오디오 칩에는 시스템 펌웨어를 통해 구성할 수 있는 많은 수의 입력 및 출력이 있을 수 있습니다. 아마도 마더보드 설계자는 각 신호가 필요한 위치(예: 사운드 칩의 올바른 쪽 또는 다른 곳에 있음).

시스템에는 하나의 사운드 입력 채널(노트북의 내부 마이크)만 있지만 여러 개의 출력이 있습니다. 하나는 내부 스피커/헤드폰 출력이고 다른 하나는 사운드를 제공하기 위한 HDMI 출력 및/또는 DisplayPort일 수 있습니다. 모든 USB Type-C 대체 포트 모드: DisplayPort는 디스플레이의 데이지 체인 연결을 허용하므로 USB Type-C 포트당 두 개 이상의 사운드 출력 채널이 있을 수 있습니다.

3.) 귀하의 경우 card0ALSA 의미의 상위 장치 0000:00:1f.3는 PCI(e) 버스 ID입니다. 질문의 이 부분은 덜 명확합니다. 정확히 무엇을 하시겠습니까 libudev?

수행하려는 작업에 따라 이와 같은 작업을 통해 udevadm info -q all -a -p /sys/devices/pci0000:00/0000:00:1f.3/sound/card0/pcmC0D0p구성 요소가 서로 어떻게 관련되어 있는지에 대한 아이디어를 얻을 수 있습니다. 이 특정 버스 ID는 Intel 칩셋에 통합된 HD 오디오 사운드 칩의 일반적인 ID입니다.

관련 정보