ARM&Linux科谱
+ -

/proc/asound/pcm 是什么?

2025-10-29 20 0

ALSA 有其自己的 proc 树,即 /proc/asound。
每张声卡都有其子树 cardX,其中 X 的范围是 0 到 7。声卡特定的文件存储在 card* 子目录中。
详解见:https://docs.linuxkernel.org.cn/sound/designs/procfile.html

声卡驱动上挂着多个逻辑子设备,有 pcm 音频数据流、control 混音器、midi 、timer 定时器等

                  +-----------+
                  | snd_card  |
                  +-----------+
                    |   |   |
        +-----------+   |   +------------+
        |               |                |
+-----------+    +-----------+    +-----------+
 |  snd_pcm  |    |snd_control|    | snd_timer |    ...
 +-----------+    +-----------+    +-----------+

1. /proc/asound/pcm 是什么?

这个文件是 ALSA(Advanced Linux Sound Architecture)驱动框架在运行时动态生成的一个信息接口。它列出了当前内核中所有可用的PCM(脉冲编码调制,即数字音频流)设备,无论这些设备是物理的还是虚拟的。

关键点: 它显示的是ALSA 驱动 探测到并注册的“声卡”及其“设备”。


2. 查看声卡和PCM设备的信息相关指令

1.查看当前的声卡:
显示当前配置的 ALSA 驱动程序列表、索引、id 字符串、简短和详细描述。

cat /proc/asound/cards
 0 [rockchipad82088]: rockchip-ad8208 - rockchip-ad82088
                      rockchip-ad82088
 1 [rockchipes8316 ]: rockchip-es8316 - rockchip-es8316
                      rockchip-es8316
 2 [rockchiphdmi0  ]: rockchip-hdmi0 - rockchip-hdmi0
                      rockchip-hdmi0
 3 [Audio          ]: PCIEE Audio - PCIEE Audio
                      PCIEE Audio 0

2.声卡设备
列出 ALSA 原生设备映射。

1|console:/proc/asound $ cat /proc/asound/devices 
  2: [ 0- 0]: digital audio playback
  3: [ 0- 0]: digital audio capture
  4: [ 0]   : control
  5: [ 1- 0]: digital audio playback
  6: [ 1- 0]: digital audio capture
  7: [ 1]   : control
  8: [ 2- 0]: digital audio playback
  9: [ 2]   : control
 10: [ 3- 0]: digital audio playback
 11: [ 3- 0]: digital audio capture
 12: [ 3]   : control
 33:        : timer
  • [ 3- 0]: digital audio playback → 第3号声卡,第0号PCM播放设备
  • [ 3- 0]: digital audio capture → 第3号声卡,第0号PCM采集设备
  • [ 3] : control → 第3号声卡的控制设备(如混音器)

2.查看pcm设备列表:

console:/proc/asound $ cat /proc/asound/pcm
00-00: dailink-multicodecs multicodec-0 : dailink-multicodecs multicodec-0 : playback 1 : capture 1
01-00: dailink-multicodecs es8316.7-0011-0 : dailink-multicodecs es8316.7-0011-0 : playback 1 : capture 1
02-00: rockchip-hdmi0 i2s-hifi-0 : rockchip-hdmi0 i2s-hifi-0 : playback 1
03-00: PCIEE Audio : PCIEE Audio : playback 1 : capture 1

3.查看有哪些音频设备节点

console:/proc/asound $  ls -l /dev/snd
total 0
crw-rw---- 1 system audio 116,   4 1970-01-01 00:00 controlC0
crw-rw---- 1 system audio 116,   7 1970-01-01 00:00 controlC1
crw-rw---- 1 system audio 116,   9 1970-01-01 00:00 controlC2
crw-rw---- 1 system audio 116,  12 1970-01-01 00:00 controlC3
crw-rw---- 1 system audio 116,   3 1970-01-01 00:00 pcmC0D0c
crw-rw---- 1 system audio 116,   2 1970-01-01 00:00 pcmC0D0p
crw-rw---- 1 system audio 116,   6 1970-01-01 00:00 pcmC1D0c
crw-rw---- 1 system audio 116,   5 1970-01-01 00:00 pcmC1D0p
crw-rw---- 1 system audio 116,   8 1970-01-01 00:00 pcmC2D0p
crw-rw---- 1 system audio 116,  11 1970-01-01 00:00 pcmC3D0c
crw-rw---- 1 system audio 116,  10 1970-01-01 00:00 pcmC3D0p
crw-rw---- 1 system audio 116,  33 1970-01-01 00:00 timer

这些设备节点的 Major=116,Minor 则与 /proc/asound/devices 所列的对应起来,都是字符设备.
上层可以通过 open / close / read / write / ioctl 等系统调用来操作声卡设备,这和其他字符设备类似,但一般情况下我们会使用已封装好的用户接口库如 tinyalsa、alsa-lib。

4.查看当前有哪些进程占用了pcm设备节点

lsof |grep pcm

3.音频设备命名规则

命名规则:[device type]C[card index]D[device index][capture/playback],

名字中含有4部分的信息:

1.device type

设备类型,通常只有comtrol/pcm这2种。从音频设备节点可以看到声卡会管理很多设备,PCM设备只是其中的一种设备。

2.card index

声卡的id,代表第几块声卡。通常都是0,代表第一块声卡。手机上通常都只有一块声卡。

3.device index

设备的id,代表这个设备是声卡上的第几个设备。设备的ID只和驱动中配置的DAI link的次序有关。如果驱动没有改变,那么这些ID就是固定的。

4.capture/playback

只有PCM设备才有这部分,只有c和p两种。c代表capture,说明这是一个提供录音的设备,p代表palyback,说明这是一个提供播放的设备

系统会在/proc/asound/pcm文件中列出所有的音频设备的信息,可以用cat /proc/asound/pcm查看:

console:/proc/asound $ cat /proc/asound/pcm
00-00: dailink-multicodecs multicodec-0 : dailink-multicodecs multicodec-0 : playback 1 : capture 1
01-00: dailink-multicodecs es8316.7-0011-0 : dailink-multicodecs es8316.7-0011-0 : playback 1 : capture 1
02-00: rockchip-hdmi0 i2s-hifi-0 : rockchip-hdmi0 i2s-hifi-0 : playback 1
03-00: PCIEE Audio : PCIEE Audio : playback 1 : capture 1

以上面的左侧00-01为例来说明下:前面2位数字指的card index:00,后面2位是device index:01。

0 篇笔记 写笔记

PCIe中的Crosslink与Multi-Root/Multi-Processor系统
在PCIe总线中,Switch是一个特殊的设备,该设备由1个上游端口和2~n个下游端口组成。PCIe总线规定,在一个Switch中可以与RC直接或者间接相连的端口为上游端口,在PCIe总线中,RC的位置一般在上方,这也是上游端口这个称呼的由来。在Switch中除了上游端口外,其他所有端口都被称为下游......
/proc/asound/pcm 是什么?
ALSA 有其自己的 proc 树,即 /proc/asound。每张声卡都有其子树 cardX,其中 X 的范围是 0 到 7。声卡特定的文件存储在 card* 子目录中。详解见:https://docs.linuxkernel.org.cn/sound/designs/procfile.html......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!