![声卡问题,音频 2 dj。snd-usb-caiaq 日志:无法找到要使用的输出 urb](https://linux22.com/image/1077846/%E5%A3%B0%E5%8D%A1%E9%97%AE%E9%A2%98%EF%BC%8C%E9%9F%B3%E9%A2%91%202%20dj%E3%80%82snd-usb-caiaq%20%E6%97%A5%E5%BF%97%EF%BC%9A%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%E8%A6%81%E4%BD%BF%E7%94%A8%E7%9A%84%E8%BE%93%E5%87%BA%20urb.png)
我正在运行 Ubuntu 12.04 并且有一个原生乐器音频 2 dj 声卡。
当我听音乐或看视频时,声音消失(视频也停止),我必须拔出并插入声卡才能再次听到声音。
我设法找到的消息是 snd-usb-caiaq 日志:无法找到要使用的输出 urb
答案1
查看最新内核的源代码声音/usb/caiaq/audio.c在 read_completed 函数中,我们可以看到 caiaq usb 内核模块发出的消息。在模块顶部,我们可以看到定义了 32 个 urb 缓冲区。
如果所有这些缓冲区都标记为正在使用,则会发送此消息。我认为重新插入设备会重新创建这些缓冲区是有道理的。
这表明该代码或该 Linux 驱动程序模块内的相关代码存在内存泄漏类型的错误。
两个建议:
将此报告为 Linux 内核的错误。请参阅我如何报告错误?。
使用更新的主线内核尝试此操作。请参阅这以获取更新的说明。您需要最新的 Linus 树。我会提到专有驱动程序会使此过程复杂化。在上述错误报告中报告使用更新主线内核的结果。
URB 是 USB 请求块,它类似于 IP 数据包。缓冲区保存这些数据包以供发送和接收。一些相当技术性的信息是这里. 声音样本帧是这些请求块的典型有效负载。