如何编写伪ALSA兼容设备驱动程序?

问题描述:

我想编写虚拟ALSA兼容驱动程序作为可加载内核模块。当通过ALSA-lib通过aplay/arecord访问它时,假设它必须像通常的7.1声道音频设备一样提供所有基本控制 - 采样率,通道数量,格式等... 下面会只需从音频流中获取每个通道,并将其作为UDP数据包流通过网络发送。 它必须能够被加载多次,并且最终它会暴露多达/ dev下的音频设备。这样我们就可以在系统中有多个虚拟声卡。如何编写伪ALSA兼容设备驱动程序?

这种内核模块的最小结构应该是什么? 你能给我一个示例框架(至少是界面)100%符合ALSA吗? ALSA驱动程序的例子很差...

+1

您可能不需要创建内核模块。你想要的是编写一个alsa插件,它将创建一个alsa设备并在网络上放置任何通道。你可以看看pulseaudio正在做什么,或者简单地配置脉冲音频来完成你想要的。 –

+0

我明白了。但是我真的想把它放在内核空间中,以便用于其他任何事情。我正计划从这个驱动程序中控制LED。 – valioiv

+0

您还可以从用户空间做什么 –

我想我刚刚找到了我需要的东西。 还有比“假的”,并在内核树声/ drivers目录下的“aloop”模板没有更好的ALSA接口的例子:

https://alsa-project.org/main/index.php/Matrix:Module-dummy

https://www.alsa-project.org/main/index.php/Matrix:Module-aloop

我需要实现网络部分只要。

编辑: 添加另一个项目非常简单但重要的虚拟ALSA驱动程序:

https://alsa-project.org/main/index.php/Minivosc

  • 安装alsa-basealsa-util
  • modprobe snd-dummy
  • 使用alsamixer或使用mocp(需要安装moc)来配置添加虚拟音频成功