- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
DMA 缓冲区是由驱动程序映射的内存。例如,在使用 rtl8319 的 pci-skeleton.c 中,我们有:
tp->tx_bufs = pci_alloc_consistent(tp->pci_dev, TX_BUF_TOT_LEN,
&tp->tx_bufs_dma);
但 DMA 引擎可以驻留在 soc 或设备中。
**即使 DMA 引擎在设备中,是否也应该分配 DMA 缓冲区?为什么 ? **
rtl8139cp 数据表(我认为 dma 是设备的一部分,但不确定): http://realtek.info/pdf/rtl8139cp.pdf
我认为“DMA 引擎”和“DMA Controller ”指的是同一事物。如有不妥请指正。
问候,冉
最佳答案
明确地说,DMA(直接内存访问)是一种将数据从外围设备传输到主内存或从主内存传输数据的方法。为方便起见,忽略了内存到内存 DMA 和外设到外设总线主控。
DMA 与编程 I/O (PIO) 相反,CPU 执行数据传输。对于 PIO,CPU 将通过轮询设备的状态或让设备生成中断来指示外设的可用性来等待外设准备就绪。
轮询 PIO 是 CPU 密集型的,使用中断的 PIO 是一个巨大的改进。但是在没有任何 CPU 参与(设置除外)的情况下执行传输是 DMA 的含义。 DMA 传输由系统的 DMA Controller (也称为第三方 DMA)或与外设关联的总线主控器(也称为第一方 DMA)执行。 CPU 参与(简单的,非链接的)DMA 传输包括设置传输(例如,分配源和目标地址、传输计数),然后确认传输结束。
DMA buffers are memory mapped by the driver.
不知道你的意思是什么。
分配或获取支持 DMA 的缓冲区通常不需要映射。
在您的问题中,您暗示具有集成传输和接收 FIFO 并使用 PCI 总线控制的 PCI 以太网 Controller 不必“映射 DMA 缓冲区”。以太网 Controller 是系统的外围设备,它必须从主存中获取数据进行传输,而它通过以太网接收到的数据最终必须传输到主存中,以便 CPU 进行处理。集成的发送和接收 FIFO 只是存在于主存储器和其余外围设备之间的中间缓冲区。
But DMA engine can reside in soc or in device.
你对术语很草率。
SoC 是片上系统。典型的SoC肯定会有一个DMA Controller ,它是系统的DMA Controller ,即针对第三方DMA。
一个设备可能有一个 DMA 引擎,尤其是当它所连接的总线支持总线控制时。您引用的以太网 Controller 确实支持 PCI 总线控制。这种总线控制是为了访问(PCI 主机的)主内存。
外围设备可能使用总线控制(而不是系统的 DMA Controller )这一事实不能否定设备驱动程序正确分配 DMA 缓冲区的必要性。总线主控器与系统的 DMA Controller 具有完全相同的目的:将数据从外围设备传输到/从主存储器传输。 CPU 只能处理驻留在主存中的数据。外围设备的目的是将该数据传输到主内存进行处理,以及从主内存传输已处理的数据。
Is it that dma buffers should be allocated even if DMA engine is in device ? Why ?
由于总线控制是为了使外围设备能够以最少的 CPU 干预访问主内存,因此被访问的内存必须是 DMA 可用的。即:
当 PCI 设备驱动程序使用 pci_alloc_consistent() 获取用于数据传输的缓冲区时,可确保 DMA 内存。此例程将返回一个虚拟地址供 CPU 引用此缓冲区,并返回一个 dma_handle
供总线主控引用此缓冲区。
关于linux - 当 DMA 引擎在设备中时,为什么驱动程序需要映射 DMA 缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48659470/
以下代码: if (!(ep = engOpen("\0"))) { fprintf(stderr, "\nCan't start MATLAB engine\n");
我在谈论一些网络事物,例如 http://uservoice.com/ 你能推荐任何其他类似的服务、网站,或者可能是(甚至更好)一个现成的引擎来部署在自己的服务器上? 实际上,更多关于系统的问题,可以
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在寻找一个矩阵表达式解析器/引擎。例如, 3 * A + B * C 其中 A、B、C 是矩阵是一个典型的表达式。这应该类似于(单值)数学表达式解析器/引擎,但应该处理矩阵值和变量。我已经用谷歌搜
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
是否有基于 .net 的 cometd 引擎?比如 Ajax 推送引擎 那是免费和开源的吗? 最佳答案 轨道式 Orbited是一个 HTTP 守护进程,针对长期 cometd 连接进行了优化。它旨在
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在寻找支持以下功能的 haml javascript“端口”: 存储在文件中的模板。 JSON 输入。 支持“集合”[{Booking},{Booking},{Booking}] 进行迭代处理。
我在 IronPython 中托管 IronPython。我没有找到使用等效的命令行参数初始化它的方法:-X:FullFrames . 我的代码有点像这样: import clr clr.AddRef
我想将我工作的公司的所有松散信息整合到一个知识库中。 Wiki 似乎是一种可行的方法,但大部分相关信息都隐藏在 PST 文件中,并且需要很长时间才能说服人们将他们的电子邮件(包括附件)手动翻译成 Wi
我已经使用缓存的 flutter 引擎 flutter 到现有的 native 应用程序(添加到应用程序)中。 override fun onCreate(savedInstanceState: Bu
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在使用 Django Cassandra我已经定义了我的模型,我可以用它来命名一个表: class Meta: db_table = "table_name" 但是,Cassand
类似于 NoSQL 数据库,但适用于 OLAP。当然是开源的:) 编辑: OLAP 引擎在幕后使用关系数据库。例如 SAPBW 可以使用 Oracle 等。我的意思是一个没有这个底层关系数据库的 OL
我正在使用以下片段来 enable Razor templating in my solution (在 ASP.NET MVC3 之外)。是否可以轻松实现布局? 背景资料: 我在这一点上(模板编译成
我们目前使用闭源知识库解决方案,所见即所得创建文章是TinyMCE(看起来可能是修改/简化的)。 他们目前根本不允许更改它(添加插件等,除非您可以以某种方式注入(inject)插件)。 我确实拥有对
我正在评估我们的高性能电信应用程序的 BPEL 引擎,但性能似乎很差。我们评估了 Apache Ode、SunBPEL 引擎、Active BPEL 等。您知道任何更快的 BPEL 引擎实现或 C/C
Elastic / Lucene真的需要在文档中存储所有索引数据吗?您难道不就通过通过传递数据,以便Lucene may index the words into its hash table并为每个
我是 3D 游戏新手?我正在使用 Libgdx。如何计算像 Tetromino Revolution 游戏这样的透视相机的参数?请给我任何想法。 看图片:http://www.terminalstud
我是一名优秀的程序员,十分优秀!