ALSA Control、MIDI、Compress 与其它接口

ALSA Control、MIDI、Compress 与其它接口

1. ALSA Core 范围

sound/core/Makefile 构建基础 snd,并按 Kconfig 加入 PCM、timer、rawmidi、sequencer、hwdep、compress 等模块。

2. Minor 与 file operations

core/sound.c 管理 ALSA minor:

  • control;
  • PCM playback/capture;
  • timer;
  • sequencer;
  • hwdep;
  • rawmidi。

snd_register_device() 注册具体 fops;snd_open() 按 minor 转交。card disconnect 后已有 fd 必须安全失败并等待引用释放。

3. Control

control.c

  • kcontrol add/remove/replace;
  • element info/read/write;
  • event subscription;
  • TLV;
  • power state;
  • compat ioctl。

control 节点也是枚举声卡与读取 card info 的主要接口。

4. Timer

timer.c 提供 ALSA timer,可由系统 timer、PCM period 或硬件 timer 驱动。sequencer 和应用可订阅。它不同于音频 DMA 本身。

5. RawMIDI

rawmidi.c 提供 MIDI byte stream:

  • input/output substream;
  • ring buffer;
  • trigger/drain;
  • poll;
  • timestamp/params。

USB MIDI 在 sound/usb/midi.c,SoC 产品未必使用。

6. Sequencer

core/seq/ 提供事件化 MIDI:

  • client/port;
  • queue/timer;
  • routing/subscription;
  • kernel/user clients;
  • synth integration。

其复杂度和攻击面明显高于 RawMIDI,嵌入式不需要时可关闭 Kconfig。

7. HWDEP

hwdep.c 为硬件专有 ioctl/read/write/mmap 提供通道。ABI 由具体驱动定义,不应作为通用 PCM API。

8. Compress offload

compress_offload.c 对压缩音频 DSP/offload 提供:

  • codec capability;
  • set_params;
  • trigger;
  • timestamp/pointer;
  • drain/partial drain;
  • metadata。

ASoC 桥接在 soc-compress.c。普通 RK3588 I2S PCM 与视频 MPP 编解码不因此自动成为 compress offload。

9. OSS compatibility

core/oss/ 和顶层 sound_core.c 保留 OSS/兼容设备号支持。新应用应使用 ALSA。裁剪系统可关闭 OSSEMUL,减少代码和 legacy ABI。

10. 其它驱动族

目录 作用
usb/ USB Audio Class、MIDI、quirks
hda/ HD Audio core
pci/ PCI 声卡
firewire/ FireWire audio
virtio/xen/ 虚拟音频
soc/ 嵌入式 ASoC
synth/ 软件/硬件 synth

这些都属于源码树,但 RK3588 产品是否启用由 .config 和硬件决定。

11. 生命周期

1
2
3
4
5
6
7
snd_card_new()
-> create control/PCM/etc
-> snd_card_register()
-> userspace opens fds
-> snd_card_disconnect()
-> wake/block new opens
-> snd_card_free_when_closed()

热拔插驱动应先 disconnect,再释放硬件,最后等待 fd 引用。

文章互动

阅读 --

留言

0 条留言

正在加载留言…