DMA 代理有什么意义。或者我们可以在用户空间中使用没有意义的内核数据结构吗

what's the point of DMA proxy. Or can we use kernel data structures in userspace which makes no sense

我正在研究 DMA 代理和 DMA 代理通道。基本上他们是 比如让 Userspace 应用程序写入 tx,读取 rx 内核数据结构。并让设备访问虚拟内存数据结构,因为设备理解物理地址。

此代码https://github.com/mstuehn/dma_proxy/blob/master/dma_proxy_test.c

以及我正在阅读的这篇文章https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842418/Linux+DMA+From+User+Space

从这篇论文中 http://www.diva-portal.org/smash/get/diva2:22746/FULLTEXT01.pdf 它说这个

in Linux the kernel uses virtual memory address but most hardware systems use physical address for bus addressing. For hardware to be able to access data structures residing in kernel virtual memory space these structures have to be mapped to physical memory address. Its not sufficient to use simple address conversion methods since some system memory management unit have to be re-programmed and bounce buffers have to be used (probably in system memory management unit -- please clarify).

我想我对 dma 代理驱动程序和相关的 Userspace 应用程序有一些了解(我猜它用于嵌入式 Linux 系统)。

但是所有这些有什么意义,例如,如果我正在查看 NIC 卡,那么无论我想通过 Userspace 应用程序中的 mmap 调用和 MMAP 的内核实现得到什么在代理驱动程序中将具有内核数据结构。在 NIC 卡的情况下,RX/TX 将是内核内存 space 中的设备特定数据结构表示,因为从 struct ethhdr / struct iphdr / struct tcphdr / 等mmap 的 return 是不可能的,因为论文的上述段落说虚拟地址到用户 space 地址的转换可能是不可能的(基本上它说的是物理地址。我假设这是从阅读的文本中得出的)

所以基本上我没有完全使用 dma 代理驱动程序。我需要一些解释来解决这个问题,以及如何在应用程序中使用 return of mmap 调用,即嵌入式 Linux 系统

中的服务器应用程序

What's the point of all of this for example if I am looking at NIC card, then whatever I suppose to get with the mmap call in Userspace application and Kernel implementation of MMAP in proxy driver will have kernel data structure.

内核数据结构与它有什么关系?如果您使用 DMA 从 NIC 获取数据,那么您肯定会获取原始数据(例如以太网帧)。此类数据的布局由适用的网络协议以及适用于有效负载的任何 higher-level 协议定义。

内核源代码确实定义了 C 结构类型,其布局映射以太网 headers、IP headers、TCP headers、 等领域,但这些遵循数据的 externally-defined 布局,而不是相反。

in case of NIC card the RX/TX will be the device specific data structures representation in kernel memory space

网络传输的格式不是device-specific(一般来说)。

since geting struct ethhdr / struct iphdr / struct tcphdr / etc. from return of mmap is not possible since the above paragraph from thesis says conversion of virtual addresses to Userspace addresses is probably not possible (basically it says physical address. I am assuming this from the text read)

不相关(见上文)。尽管如此,引用的论文摘录与您所描述的完全不同。它根本不是在谈论用户 space 与内核 space,而是在谈论硬件编程接口与内核代码。它表达了写作中涉及的一些并发症(kernel-space)drivers.

how can the return of mmap calls be used in applications

driver以字符设备的形式向用户space提供接口。将适当范围的字节从该设备映射到程序的内存 space 可以访问 driver 以这种方式公开的任何数据。在 DMA 接口的情况下,这可能是 DMA 传输中涉及的(物理)内存的内容。