为Cyclone V SoC创建简单的音频驱动程序(Linux)

时间:2016-01-03 11:17:57

标签: audio linux-kernel driver

我正在使用Altera Cyclone V SoC(运行Linux耦合到FPGA的ARM Cortex-A9)为电路板设计软件。 Linux操作系统运行良好,支持板载外设(以太网,SD卡等),我可以从用户空间程序访问FPGA,目前使用的是mmap()。
现在,该板也可以用作SDR(软件定义无线电)平台,所以作为一个噱头,我实现了一个非常简单的FM发射器。这已经很好用,但它只是FPGA内部的静态配置,与操作系统没有真正的连接。

我想要做的是将发射器链接到操作系统,理想情况是它可以用作标准音频输出设备,即声卡。硬件方面很灵活,目前非常简单:

  • 状态寄存器告知是否正在播放样本。
  • 存储器地址寄存器将当前读指针保存到系统存储器中,从中取样(DMA)。
  • 包含要播放的剩余样本数的寄存器。
  • 用于设置硬件采样率的寄存器。

此界面不固定,如有必要,可以很容易地更改。如果合情合理,我还可以将界面更新为类似于现有设备的界面,以便我可以使用其驱动程序。

现在问题是,我应该如何从与Linux的集成开始,即如何获得/构建合适的内核模块。我对内核模块开发很新,所以我真的不知道从哪里开始。 documentation of the Linux sound subsystem肯定会包含很多有用的信息,但我错过了“大图”,例如什么应该进入驱动程序的哪个部分,或者系统的实际接口(ALSA,如果我得到正确的)必须看起来像。

btw:我知道LDD3的书,并且知道内核模块应该如何看起来和工作一般,但我不知道如何构建一个与音频子系统很好地结合的内容。

感谢您提出意见,建议,链接等。

1 个答案:

答案 0 :(得分:2)