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 | snd_card_new() |
热拔插驱动应先 disconnect,再释放硬件,最后等待 fd 引用。
正在加载留言…