부팅 중에 발생하는 USB 오디오 이벤트를 어떻게 디버깅합니까?

부팅 중에 발생하는 USB 오디오 이벤트를 어떻게 디버깅합니까?

나는최고의 D30Pro USB DAC일단 로그인하면 (대부분) 잘 작동하지만 시작(systemd) 중에 "대상 사운드 카드에 도달"하는 순간 연속적인 톱니파 음파가 출력되기 시작합니다. 해결 방법은 소음이 꽤 크기 때문에 로그인할 때까지 장치를 음소거하는 것이었습니다. 어쨌든 로그인 프로세스를 통해 문제를 해결할 수 있습니다.

나는 1년여 전에 장치를 구입한 이후로 이 문제를 안고 살아왔습니다. 최근에는 근본 원인을 파악하려는 동기가 생겼습니다.

그 주변에서 발생하여 dmesg다음을 출력합니다.

usb 1-8: 1:3 : unsupported format bits 0x100000000

이 줄을 담당하는 코드는 다음과 같습니다.커널에서. 내가 이해하는 한, 형식은첫 번째 인터페이스에 대한 세 번째 대체 설정, 즉 DSD를 인식할 수 없습니다.

$ cat /proc/asound/card0/stream0
Topping D30 Pro at usb-0000:00:14.0-8, high speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    Packet Size = 72
    Momentary freq = 44099 Hz (0x5.8328)
    Feedback Format = 16.16
  Interface 1
    Altset 1
    Format: S32_LE
    Channels: 2
  ...
  Interface 1
    Altset 3
    Format: SPECIAL DSD_U32_BE
    Channels: 2
    Endpoint: 0x01 (1 OUT) (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us
    Bits: 32
    DSD raw: DOP=0, bitrev=0
    Channel map: FL FR
    Sync Endpoint: 0x81 (1 IN)
    Sync EP Interface: 1
    Sync EP Altset: 3
    Implicit Feedback Mode: No

문제는 PipeWire를 사용하면 DSD 파일을 제대로 재생할 수 있다는 것입니다.

$ pw-dsdplay DSD128.dsf -v
dsffile: opened file "DSD128.dsf" channels:2 rate:5644800 samples:7098793984 bitorder:lsb
...

현 시점에서 내 추측은 다음과 같다.이 특이한 점은 내 장치에서 작동합니다시작 중에는 작동하지 않습니다. 왜 시작 중에만 발생하는지 모르겠습니다.

가격 대비 좋은 가치; FreeBSD 또는 Windows를 부팅/사용하는 데 전혀 문제가 없습니다. LiveCD(Debian, Fedora, Arch, Ubuntu, ...)를 사용하여 부팅하려고 하는 Linux 배포판에 관계없이 이 문제가 발생하므로 배포판과 관련이 없는 것 같지만 현재 6.4.12-arch1-1.

다음 단계로 나는 새로운 커널을 컴파일하고 함수에 사용된 구조에 대한 인쇄 문을 추가하려고 생각했지만, 그러다가 발견했습니다.Kprobe 기반 이벤트 추적, 이는 디버깅하기에 더 좋은 방법인 것 같지만, 추적하려는 이벤트가 지원되지 않는 것 같아서 어쨌든 컴파일해야 합니다.

내가 모르는 이 문제를 디버깅하는 더 쉬운 방법이 있습니까? 어쩌면 내가 간과하고 있는 깃발이 아닐까? 이상적으로는 끝없는 재부팅과 컴파일이 필요하지 않은 것입니까? 하지만 다른 곳에서는 이 문제가 발생하지 않았으므로 이것이 어떻게 가능한지 잘 모르겠습니다.

감사해요!

관련 정보