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/