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 開始,最後的 pc 表示播放或捕獲方向。此子樹中的檔案將在後面描述。

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=yCONFIG_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/