ALSA 驱动程序的 Proc 文件¶
Takashi Iwai <tiwai@suse.de>
通用¶
ALSA 有其自己的 proc 树,即 /proc/asound。在此树中可以找到许多有用的信息。当您遇到问题需要调试时,请检查以下各节中列出的文件。
每张声卡都有其子树 cardX,其中 X 的范围是 0 到 7。声卡特定的文件存储在 card*
子目录中。
全局信息¶
- cards
显示当前配置的 ALSA 驱动程序列表、索引、id 字符串、简短和详细描述。
- version
显示版本字符串和编译日期。
- modules
列出每张声卡的模块
- devices
列出 ALSA 原生设备映射。
- meminfo
显示通过 ALSA 驱动程序分配的页面的状态。仅当
CONFIG_SND_DEBUG=y
时出现。- hwdep
列出当前可用的 hwdep 设备,格式为
<card>-<device>: <name>
- pcm
列出当前可用的 PCM 设备,格式为
<card>-<device>: <id>: <name> : <sub-streams>
- timer
列出当前可用的定时器设备
- oss/devices
列出 OSS 设备映射。
- oss/sndstat
提供与 /dev/sndstat 兼容的输出。您可以将其符号链接到 /dev/sndstat。
声卡特定文件¶
声卡特定文件位于 /proc/asound/card*
目录中。一些驱动程序(例如 cmipci)有自己的 proc 条目用于寄存器转储等(例如 /proc/asound/card*/cmipci
显示寄存器转储)。这些文件对于调试非常有帮助。
如果此声卡上有可用的 PCM 设备,您可以看到诸如 pcm0p 或 pcm1c 这样的目录。它们保存了每个 PCM 流的 PCM 信息。pcm
后面的数字是 PCM 设备编号,从 0 开始,最后的 p
或 c
表示播放或捕获方向。此子树中的文件将在后面描述。
MIDI I/O 的状态可以在 midi*
文件中找到。它显示了设备名称以及通过 MIDI 设备接收/传输的字节数。
如果声卡配备了 AC97 编解码器,则存在 codec97#*
子目录(稍后描述)。
如果 OSS 混音器仿真已启用(并且模块已加载),oss_mixer 文件也会出现在这里。这显示了 OSS 混音器元素到 ALSA 控制元素的当前映射。您可以通过写入此设备来更改映射。详细信息请阅读 OSS-Emulation.txt。
PCM Proc 文件¶
card*/pcm*/info
此 PCM 设备的通用信息:声卡编号、设备编号、子流等。
card*/pcm*/xrun_debug
当
CONFIG_SND_DEBUG=y
和CONFIG_SND_PCM_XRUN_DEBUG=y
时,此文件出现。它显示了 ALSA PCM 中间层的 xrun(= 缓冲区溢出/xrun)和无效 PCM 位置调试/检查的状态。它接受一个整数值,可以通过写入此文件来更改,例如# echo 5 > /proc/asound/card0/pcm0p/xrun_debug
该值由以下位标志组成
位 0 = 启用 XRUN/jiffies 调试消息
位 1 = 在 XRUN / jiffies 检查时显示堆栈跟踪
位 2 = 启用额外的 jiffies 检查
当位 0 设置时,驱动程序在检测到 xrun 时会向内核日志显示消息。当在周期更新(通常从中断处理程序调用)中检测到无效的硬件指针时,也会显示调试消息。
当位 1 设置时,驱动程序将额外显示堆栈跟踪。这可能有助于调试。
自 2.6.30 起,此选项可以使用 jiffies 启用 hwptr 检查。这可以检测自发无效的指针回调值,但对于(大多数)有错误的硬件,如果它不提供平滑的指针更新,可能会导致过多的修正。此功能通过位 2 启用。
card*/pcm*/sub*/info
此 PCM 子流的通用信息。
card*/pcm*/sub*/status
此 PCM 子流的当前状态,已用时间,硬件位置等。
card*/pcm*/sub*/hw_params
为此子流设置的硬件参数。
card*/pcm*/sub*/sw_params
为此子流设置的软参数。
card*/pcm*/sub*/prealloc
缓冲区预分配信息。
card*/pcm*/sub*/xrun_injection
当任何值写入此 proc 文件时,会触发正在运行的流的 XRUN。用于故障注入。此条目是只写。
AC97 编解码器信息¶
card*/codec97#*/ac97#?-?
显示此 AC97 编解码器芯片的通用信息,例如名称、功能、设置。
card*/codec97#0/ac97#?-?+regs
显示 AC97 寄存器转储。对调试很有用。
当 CONFIG_SND_DEBUG 启用时,您可以写入此文件直接更改 AC97 寄存器。传递两个十六进制数字。例如,
# echo 02 9f1f > /proc/asound/card0/codec97#0/ac97#0-0+regs
USB 音频流¶
card*/stream*
显示给定声卡上每个音频流的分配和当前状态。此信息对于调试非常有用。
HD-Audio 编解码器¶
card*/codec#*
显示通用编解码器信息和每个小部件节点的属性。
card*/eld#*
适用于 HDMI 或 DisplayPort 接口。显示从连接的 HDMI 接收器检索到的 ELD(类似 EDID 的数据)信息,并描述其音频功能和配置。
可以通过执行
echo name hex_value > eld#*
来修改一些 ELD 字段。仅当您确定 HDMI 接收器提供的值错误时才这样做。如果这使您的 HDMI 音频正常工作,请向我们报告,以便我们可以在未来的内核版本中修复它。
音序器信息¶
- seq/drivers
列出当前可用的 ALSA 音序器驱动程序。
- seq/clients
显示当前可用的音序器客户端和端口列表。连接状态和运行状态也显示在此文件中。
- seq/queues
列出当前已分配/正在运行的音序器队列。
- seq/timer
列出当前已分配/正在运行的音序器定时器。
- seq/oss
列出与 OSS 兼容的音序器内容。
调试帮助?¶
当问题与 PCM 相关时,首先尝试打开 xrun_debug 模式。这会在 xrun 发生时提供内核消息。
如果确实是 bug,请提供以下信息进行报告
驱动程序/声卡名称,显示在
/proc/asound/cards
中寄存器转储(如果可用)(例如
card*/cmipci
)
如果是 PCM 问题,
PCM 设置,显示在 PCM 子流目录中的 hw_parms、sw_params 和 status 中
如果是混音器问题,
AC97 proc 文件,
codec97#*/*
文件
对于 USB 音频/MIDI,
lsusb -v
的输出声卡目录中的
stream*
文件
ALSA bug 追踪系统位于:https://bugtrack.alsa-project.org/alsa-bug/