c - linux 中的异步 memcpy?

标签 c linux dma

linux有异步memcpy函数吗?我希望它与 DMA 一起工作并在完成时通知我。

最佳答案

据我所知,CPU 不会/不能对自己执行 DMA。因此,您需要总线上的外部硬件来为您完成这项工作。

然而,大多数硬件无法寻址所有物理内存,因此除非您在用例中对内存地址范围有非常严格的定义,否则不可能进行精确的 memcpy 克隆。否则内核将不得不将该 block memcpy 到您自己的内存块本身,这首先会破坏克隆 memcpy 的目的:)

但是如果你想在不使用 memcpy 的情况下创建内存块的“克隆”(顺便说一下,这仍然是一个坏主意,因为 DMA 内存访问通常比 CPU 慢)你可以将内存块发送到视频卡,然后将其拉回另一个缓冲区。您甚至可以将 block 放入视频内存中(putbitmap()?:))并执行硬件加速 bitblt() 以动态创建副本。

您介意分享您的实际目标,以便人们可以想出更聪明/更好的技巧吗?

关于c - linux 中的异步 memcpy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1798027/

相关文章:

c - 数组 typedef 结构在被函数调用时无法正常工作

c++ - 在 C/C++ (Linux)、LGPL 或 BSD 中确定 CPU 速度/内存是一项要求

linux - 使用 pci_map_single 进行多 DMA 传输

c - 如何通过 DMA channel 读取 UART 外设?

c - 增加C中字符串数组中的元素数量

c - 向后读取文件(最后一行在前)

c - 等到文件描述符在没有忙循环的情况下不再可读

linux - 拆分文件内容并存储到数组中或通过分隔符遍历文件内容

c - 诊断进程卡在D状态(不可中断 sleep /阻塞IO)