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
以
<card>-<device>: <name>
的格式列出当前可用的hwdep设备- pcm
以
<card>-<device>: <id>: <name> : <子流>
的格式列出当前可用的PCM设备- 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时,驱动程序会将消息显示到内核日志中。当在周期更新(通常从中断处理程序调用)时检测到无效的H/W指针时,也会显示调试消息。
当设置第1位时,驱动程序将额外显示堆栈跟踪。这可能有助于调试。
自2.6.30起,此选项可以使用jiffies启用hwptr检查。这会检测自发的无效指针回调值,但可能会导致对(大多数是有缺陷的)硬件进行过多的校正,这些硬件不会提供平滑的指针更新。此功能通过第2位启用。
card*/pcm*/sub*/info
此PCM子流的一般信息。
card*/pcm*/sub*/status
此PCM子流的当前状态,经过的时间,H/W位置等。
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-音频编解码器¶
card*/codec#*
显示每个小部件节点的一般编解码器信息和属性。
card*/eld#*
适用于HDMI或DisplayPort接口。显示从连接的HDMI接收器检索到的ELD(类似于EDID的数据)信息,并描述其音频功能和配置。
某些ELD字段可以通过执行
echo name hex_value > eld#*
进行修改。仅当您确定HDMI接收器提供的值错误时才执行此操作。如果这使您的HDMI音频正常工作,请向我们报告,以便我们在将来的内核版本中修复它。
音序器信息¶
- seq/drivers
列出当前可用的ALSA音序器驱动程序。
- seq/clients
显示当前可用的音序器客户端和端口列表。连接状态和运行状态也在此文件中显示。
- seq/queues
列出当前分配/运行的音序器队列。
- seq/timer
列出当前分配/运行的音序器定时器。
- seq/oss
列出与OSS兼容的音序器内容。
调试帮助?¶
当问题与PCM相关时,首先尝试打开xrun_debug模式。当发生xrun时,这将为您提供内核消息以及发生的位置。
如果确实是一个错误,请报告以下信息
驱动程序/声卡的名称,在
/proc/asound/cards
中显示寄存器转储(如果可用)(例如
card*/cmipci
)
当是PCM问题时,
PCM的设置,在PCM子流目录中的hw_parms,sw_params和status中显示
当是混音器问题时,
AC97 proc文件,
codec97#*/*
文件
对于USB音频/midi,
lsusb -v
的输出声卡目录中的
stream*
文件
ALSA错误跟踪系统位于:https://bugtrack.alsa-project.org/alsa-bug/