社区
驱动开发/核心开发
帖子详情
驱动开发启动DMA的问题
凤朝凰
2009-06-10 10:14:32
停滞一周了,希望各位大侠帮忙解决,具体问题如下:
做PCI驱动,普通方式的读写我已经实现了,现在想通过DMA对设备进行读写。在网上看到的例子都是设备自带DMA控制器,然后在EvtProgramDma例程中编程设备的DMA控制器。但我们的设备没有DMA控制器,Boss的意思是使用主板的DMA控制器。不知道这个方案是否可行,如何实现。望各位给个解决方案或者资料什么的。
感激不尽!!在网上找了一周了完全看不到这方面的资料。
...全文
222
17
打赏
收藏
驱动开发启动DMA的问题
停滞一周了,希望各位大侠帮忙解决,具体问题如下: 做PCI驱动,普通方式的读写我已经实现了,现在想通过DMA对设备进行读写。在网上看到的例子都是设备自带DMA控制器,然后在EvtProgramDma例程中编程设备的DMA控制器。但我们的设备没有DMA控制器,Boss的意思是使用主板的DMA控制器。不知道这个方案是否可行,如何实现。望各位给个解决方案或者资料什么的。 感激不尽!!在网上找了一周了完全看不到这方面的资料。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
通天红鱼
2009-10-29
打赏
举报
回复
最近也在研究kmdf的东西,楼主说的东西我明白,是想用PC主板上的DMA控制器来实现数据拷贝的工作。
这里有一个问题,KMDF在WDK的文档里面明确说明,不支持ISA老式的DMA传输,即设备没有DMA控制器,需要用PC主板控制器的情况。这个时候,可能需要用WDM的驱动框架,或者更老的NT式驱动了。因为现在的PC主机上的DMA控制器是通过PCI-ISA桥挂载的ISA设备。同时我也在找可以访问并且使用这个设备的方法,我想实现一个Memory->Memory的Test程序
lz提到黑屏重启,我没有遇到过,蓝屏重启倒是有,那是因为代码错误,产生了页错误,这个方面的内容在很多windows驱动相关的书上都可以找到。
应该是lz在EvtIoWrite、EvtIoRead中调用了在>=DISPATCH_LEVEL中才能调用的函数。直接或者间接的
凤朝凰
2009-06-18
打赏
举报
回复
看到自己的帖子沉了,为什么没人理我了呢。
是哪里做错了么?
凤朝凰
2009-06-17
打赏
举报
回复
怎么没有人理我了呢?谁来帮帮我啊。
凤朝凰
2009-06-16
打赏
举报
回复
没人可以帮忙么?
凤朝凰
2009-06-15
打赏
举报
回复
玩了一个周末,重新顶起
heling2008
2009-06-15
打赏
举报
回复
还是请高手吧,
凤朝凰
2009-06-12
打赏
举报
回复
自己顶起,等待高手。
zhj8727
2009-06-12
打赏
举报
回复
guanzhu
yyh84yangtaohui
2009-06-12
打赏
举报
回复
帮顶 期待高手赐教!
dthxman
2009-06-11
打赏
举报
回复
你是有操作系统的设备,当然只能通过映射读到内存io地址,你说的dma就是你cpu自带的吧,你cpu的datasheet上难道没有介绍寄存器的使用方法吗。
凤朝凰
2009-06-11
打赏
举报
回复
原来是我不会说话了。楼上的理解就是我的问题了。
问题一:开始时认为我们的设备没有DMA控制器,boss的意思是PC主板上就有DMA控制器,要我使用PC主板上的DMA控制器实现对我们的设备的DMA方式的读写操作(不知这次可否说明白了,简单说:使用PC主板的DMA控制器读写PCI设备)。请问各位大哥:该方案是否可行,可行的话请给出实现实例或者资料,不可行请给出理由我也好跟老板有个交代。
问题二:最新发现我们的设备上包含一个DMA控制器。但是它只可以从PCI Memory读到芯片的FIFO(Data Sheet上是这么说的,我还不明白PCI Memory指的到底是哪块内存)。现在我在EvtDeviceAdd例程中创建WdfDmaEnabler和WdfDmaTransaction对象,然后在EvtIoWrite例程中初始化WdfDmaTransaction。可是每次一运行系统就直接黑屏重启了。如果在初始化Transaction时从写改为读即初始化出错,则系统正常运行。请大家指点下这个到底是什么地方出错了。
问题三:今天打算向文件中输出一些调试信息,写了一个函数:打开文件,写信息,关闭文件。这个函数在DriverEntry、EvtDeviceAdd、EvtDevicePrepareHardware、EvtDeviceReleaseHardware例程中能够正常运行,但是在其他例程中就会造成系统黑屏重启。请问各位高手这又是何原因。
小弟驱动新手,希望各位不吝赐教,小弟感激不尽。只要大家说话,分不成问题!!
凤朝凰
2009-06-11
打赏
举报
回复
终于看到有人回复了,感谢大哥帮忙
不过boss的意思是使用电脑自带的DMA控制器,因为我们的设备本身是没有的,现在很怀疑这个思路是否可行,因为网上完全找不到相关的资料。
另外确定了我们设备上其实是有个DMA控制器的,不过芯片资料说只能从PCI Memory读到芯片的FIFO。我现在想先用它来熟悉下DMA的操作,但新的问题是调用WdfDmaTransactionInitlizationUsingRequest系统就重启,不知道怎么找原因……
gnutools
2009-06-11
打赏
举报
回复
lz的意思是做了pcI接口的设备,但是设备没有DMA功能,所以用PC的DMA,PC=>DMA=>pCI=>设备?
artszhao
2009-06-11
打赏
举报
回复
搂住说清楚你用DMA来做什么?
说得不清不楚,别人怎么回复你啊?
凤朝凰
2009-06-10
打赏
举报
回复
自己顶起期待高手解答……
dthxman
2009-06-10
打赏
举报
回复
好好看看板子的资料吧,如果boss叫你用板子上的dma,应该是用你们mcu自带的dma控制器吧,这个看看寄存器配置去了解下mcu内部dma是怎么用的。
凤朝凰
2009-06-10
打赏
举报
回复
为什么没人理我?
CRC与ADC与
DMA
与随机数发生器-第5季第5部分
《朱有鹏老师单片机完全学习系列课程》针对有志于物联网技术
开发
行业的零基础学员设计,共分6季,总200余小时的课程。本课程属于第5季。 本季课程主要讲解STM32的全新
开发
方式:使用STM32CubeMX工具做图形化配置,...
Linux
驱动
开发
基础之
DMA
本文对于
DMA
在Linux
驱动
中的相关运用进行了简单的介绍,并且也提到了一些
DMA
的相关概念以函数。对于
DMA
的传输过程进行了详细的介绍,并通过相关的代码进行了实现。下文所使用的硬件设备是基于ARM Cortex-A9处理器的Exynos-tiny4412
开发
板所实现的,所使用的内核版本为Linux-3.5提示:以下是本篇文章正文内容,下面案例可供参考。
zynq操作系统: Linux
驱动
开发
AXI
DMA
篇
前言 由于bram形式的速率限制,在同样紧急的时间条件下,还是改回了axi
dma
的方式来降维打击,对于几兆的速率,颇有种杀鸡用牛刀的感觉,没办法,原来的刀就是差一点,牛刀好用是好用但是终究得提升一点内功 裸机下的
DMA
相对是比较简单的,参考之前裸板对于
DMA
的操作,而对于LINUX下,只能说苦不堪言。先不谈如何实现用户空间的零拷贝
DMA
传输,光是Linux环境下的
DMA
传输就已经感觉比较棘手,一方面是对Linux了解不够深入,另一方面则是Linux在相关的使用说明方面的确没有比较好的官方支持。
linux
驱动
之
DMA
转载自:https://www.jianshu.com/p/e1b622234d13 一、前言 在 嵌入式Linux 的内核及
驱动
中,
DMA
常常被人提起。我们也许清楚它的原理且很明白它非常重要,但在某种程度上,对于
DMA
的使用者来说,我们一般使用其接口,而很少去了解整个
DMA
的运作方式。那么本文就从头到尾,简单地说一下
DMA
吧注意:本文对
DMA
的概念不做讲述,请各位读者自行了解
DMA
的概念。 二、正文 2.1 高端内存 2.1.1 内核虚拟内存 在了解
DMA
之前,我们需要先了解
Linux设备
驱动
开发
---
DMA
文章目录1 设置
DMA
映射缓存一致性和
DMA
DMA
映射一致映射流式
DMA
映射2 完成的概念3
DMA
引擎API分配
DMA
从通道设置从设备和控制器指定参数
DMA
是计算机系统的一项功能,它允许设备在没有CPU的干预的情况下访问系统主存储器RAM,使CPU完成其他任务。
DMA
控制器是负责
DMA
管理的外设,在现代处理器和微控制器中都能发现它。
DMA
功能用于执行内存读写和写入操作而不占用CPU周期。当需要传输数据块时,处理器向
DMA
控制器提供源地址和目标地址以及总字节数。然后,
DMA
控制器会自动将数据从源传输到目
驱动开发/核心开发
21,597
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章