我和朋友正试图为高级操作系统类编写虚拟设备的设备驱动程序(读取:不是PCI或USB)。我们正在使用Ubuntu 16.04。我们的任务是在我们的驱动程序中调用IOCTL并为它提供一个完整的RGB值(一个整数数组),一个空目标缓冲区和一个长度的源缓冲区。我们将调用DMA控制器将源缓冲区的内容传输到目标缓冲区,然后对目标缓冲区中的值应用线性转换。是否可以在Linux中进行内存到内存的DMA传输?如果是这样,什么函数调用DMA来开始传输?
我们已经成功地完成了没有DMA的转换,并且我们已经成功地为我们的设备分配了DMA通道。我们遇到的问题是我们似乎无法找到任何地方的功能,它描述了使用DMA启动传输。我们希望在完成后引发中断(驱动程序不应该等待传输完成)。
为了清楚我们要求的内容,我们只想知道在哪里可以找到描述此过程的函数的定义。我们不是要求代码或完成此任务的确切方法;我们只想知道可以使用哪些函数和/或什么头文件来查找它们。我们已经通过linux/dma-mapping.h查看了看起来令人难以置信的内容。我们也研究了LDD3一段时间,但似乎完全通过建立DMA的过程,而没有提供关于实际开始DMA传输的函数的信息。