<分区>
我和我的 friend 正在尝试为高级操作系统类的虚拟设备(读取:不是 PCI 或 USB)编写设备驱动程序。我们正在使用 Ubuntu 16.04。我们的任务是在我们的驱动程序中调用 IOCTL,并为其提供一个充满 RGB 值(整数数组)的源缓冲区、一个空的目标缓冲区和一个长度。我们将调用 DMA Controller 将源缓冲区的内容传输到目标缓冲区,然后对目标缓冲区中的值应用线性变换。
我们已经成功地完成了没有 DMA 的转换,并且我们已经成功地为我们的设备分配了一个 DMA channel 。我们遇到的问题是我们似乎无法在任何地方 找到描述使用 DMA 启动传输的函数。我们希望它在完成时引发中断(驱动程序不应该等待传输完成)。
为了明确我们的要求,我们只想知道在哪里可以找到描述此过程的函数定义。我们不要求代码或完成此任务的确切方法;我们只是想知道可以使用哪些函数和/或在哪个头文件中找到它们。我们已经浏览了 linux/dma-mapping.h 似乎令人作呕。我们也研究了 LDD3 一段时间,但它似乎彻底完成了设置 DMA 的过程,但没有提供太多关于应该使用哪些函数来实际开始 DMA 传输的信息。