草庐IT

dma_alloc_coherent

全部标签

c - dma_mmap_coherent 和 remap_pfn_range 有什么区别?

目前,我正在使用exampledriver从中学习,并从中建立了自己的自定义驱动程序。mmap代码几乎完全相同,除了我允许用户管理他们自己请求的大小并以此为基础进行内存分配,以及我在/dev中自动创建字符设备这一事实。为了解释上下文,对于我的用例,我想缩小我遇到的问题的范围。dma_mmap_coherent在使用kmalloc内存时可测试地工作,但是当我有一个保留的物理地址区域时,我想使用remap_pfn_range似乎安静地工作,并且dmesg不报告任何错误,但是当我去阅读,无论我在那里写了什么,它总是返回0xff字节。无论我是在ioremap内存之后在内核态中使用iowrite

linux - 什么是 Linux 内核上下文中的 DMA 映射和 DMA 引擎?

什么是Linux内核上下文中的DMA映射和DMA引擎?什么时候可以在Linux设备驱动程序中使用DMA映射API和DMA引擎API?任何真正的Linux设备驱动程序示例作为引用都是很好的。 最佳答案 WhatisDMAmappingandDMAengineincontextoflinuxkernel?内核通常使用虚拟地址。kmalloc()、vmalloc()等函数通常返回虚拟地址。它可以存储在void*中。虚拟内存系统将这些地址转换为物理地址。这些物理地址实际上对驱动程序没有用。驱动程序必须使用ioremap()映射空间并生成虚拟

c - 如何在 linux 内核模块中分配由 1GB HugePages 支持的 DMA 缓冲区?

我正在尝试为HPC工作负载分配DMA缓冲区。它需要64GB的缓冲区空间。在计算之间,一些数据被卸载到PCIe卡上。与其将数据复制到由pci_alloc_consistent提供的一堆极小的4MB缓冲区中,不如创建64个1GB缓冲区,由1GBHugePages支持。一些背景信息:内核版本:CentOS6.4/2.6.32-358.el6.x86_64内核启动选项:hugepagesz=1ghugepages=64default_hugepagesz=1g/proc/meminfo的相关部分:AnonHugePages:0kBHugePages_Total:64HugePages_Free

c++ - 大型 PCIe DMA Linux x86-64

我正在使用高速串行卡将数据从外部源高速传输到带有PCIe卡的Linux机器。PCIe卡带有一些第3方驱动程序,这些驱动程序使用dma_alloc_coherent分配dma缓冲区以接收数据。然而,由于Linux的限制,此方法将数据传输限制为4MB。我一直在阅读并尝试多种分配大型DMA缓冲区的方法,但一直无法使一种方法起作用。这个系统有32GB内存,运行的是内核版本为3.10的RedHat,我想为连续的DMA提供4GB内存。我知道首选方法是分散/聚集,但在我的情况下这是不可能的,因为有一个硬件芯片将串行协议(protocol)转换为我无法控制的DMA,我唯一可以控制的是向输入地址(即,从

c++ - 在 Linux 上的 C++ 源文件上运行 'gcc' 给出 "cc1plus: out of memory allocating ..."错误消息

我在Ubuntu上使用“gcc”编译C++源文件时遇到了一个令人费解的问题。解决了这个问题后,我想在这里发布它,以免其他人为解决它而头疼。为了这份报告,我们有最简单的C++“Hello,World”程序,存储在main.cpp中:#includeintmain(intargc,char*argv[]){return0;}当我运行命令时:gccmain.cpp我收到错误信息:cc1plus:outofmemoryallocating1677721600bytesafteratotalof475136bytes我确认我正在编译正确的位(即32位)。我做错了什么?

linux - DMA 缓存一致性管理

我的问题是:当我在设备驱动程序中正确使用[pci_]dma_sync_single_for_{cpu,device}时,如何确定何时可以安全地禁用缓存监听?我正在为通过PCIExpress(DMA)直接写入RAM的设备开发设备驱动程序,并且担心管理缓存一致性。在启动DMA时我可以设置一个控制位以在DMA期间启用或禁用缓存监听,显然为了性能我希望尽可能禁用缓存监听。在中断例程中,当切换DMA缓冲区时,我会适本地调用pci_dma_sync_single_for_cpu()和..._for_device(),但在32位Linux2.6.18上(RHEL5)事实证明,这些命令是扩展为空的宏.

linux - DMA和内存映射IO有什么区别?

DMA和内存映射IO有什么区别?他们看起来都和我很像。 最佳答案 内存映射I/O允许CPU通过读取和写入特定内存地址来控制硬件。通常,这将用于低带宽操作,例如更改控制位。DMA允许硬件直接读写内存而不涉及CPU。通常,这将用于高带宽操作,例如磁盘I/O或相机视频输入。这是一篇对MMIO和DMA进行彻底比较的论文。DesignGuidelinesforHighPerformanceRDMASystems 关于linux-DMA和内存映射IO有什么区别?,我们在StackOverflow上找

DMA外设详解

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!📃个人主页:@rivencode的个人主页🔥系列专栏:玩转STM32💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习目录一.DMA简介二.DMA功能框图(重点)三.DMA初始化结构体四.存储器到存储器实验目的实验原理实验效果五.存储器到外设实验目的实验原理实验效果六.外设到存储器(重点理解)实验目的实验原理实验效果总结一.DMA简介直接存储器存取(DMA)(DirectMemoryAccess)也是一个挂载在AHB总线上的外设,用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须

php - fatal error : Allowed memory size of 67108864 bytes exhausted (tried to allocate 122880 bytes)

我有两个域,托管在000webhost上。我在它们上安装了wordpress,几天来它运行良好,但现在它向我显示了它们两个上的以下错误:Fatalerror:Allowedmemorysizeof67108864bytesexhausted(triedtoallocate122880bytes)错误的来源(“in...”)永远不会相同(它总是在变化)。我发现这个错误很常见,但是我这里没有php.ini文件。我知道我应该更改wp-config文件。好吧,问题来了:我应该怎么做?我明白我应该添加define(‘WP_MEMORY_LIMIT’,‘...M’);//increaselimit

c++ - Qt MySQL 适配器拒绝随机连接 : Unable to allocate a MYSQL

我正在使用QMYSQL连接到本地数据库。该应用程序运行在多个线程上。每个线程使用独立连接连接到数据库。有时,当我尝试连接到数据库时,Qt会抛出以下错误。有什么问题?QMYSQL:UnabletoallocateaMYSQLobject更新添加了用于连接的代码。这个对象被移动到一个线程,连接被命名。critical是在出现严重错误(显示消息)后发送到主窗口以终止应用程序执行的信号。log是一个信号,用于将事件记录到数据库中。voidClientWorker::connect(){m_database=QSqlDatabase::addDatabase("QMYSQL","wsc");m_