大家都知道,DMA的操作是需要物理地址的,但是在linux内核中使用的都是虚拟地址,如果我们想要用DMA对一段内存进行操作,我们如何得到这一段内存的物理地址和虚拟地址的映射呢?dma_alloc_coherent这个函数实现了这种机制。
1、函数原型:void *dma_alloc_coherent(struct device *dev, size_t size,dma_addr_t *dma_handle,gfp_t gfp);下面的这一段参考http://blog.csdn.net/lanmanck/archive/2009/11/05/4773175.aspx

2、调用

A = dma_alloc_coherent(B,C,D,GFP_KERNEL);

含义:

A: 内存的虚拟起始地址,在内核要用此地址来操作所分配的内存

B: struct device指针,可以平台初始化里指定,主要是dma_mask之类,可参考framebuffer

C: 实际分配大小,传入dma_map_size即可

D: 返回的内存物理地址,dma就可以用。

所以,A和D是一一对应的,只不过,A是虚拟地址,而D是物理地址。对任意一个操作都将改变缓冲区内容。

我对此函数的理解是,调用此函数将会分配一段内存,D将返回这段内存的实际物理地址供DMA来使用,A将是D对应的

虚拟地址供操作系统调用,对A和D的的任意一个进行操作,都会改变这段内存缓冲区的内容。

dma_alloc_coheren相关推荐

  1. 【引用】DMA内存申请--dma_alloc_coherent

    在项目驱动过程中会经常用到dma传输数据,而dma需要的内存有自己的特点,一般认为需要物理地址连续,并且内存是不可cache的,在linux内核中提供一个供dma所需内存的申请函数dma_alloc_ ...

最新文章

  1. mongoengine中queryset触发网络访问机制剖析
  2. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...
  3. strcut结构体和char型数组的相互转化
  4. 在Ubuntu/Fedora/CentOS中安装Gitblit
  5. storm在运行过程中会自动调整拓扑吗_干粉灭火器灌装机的操作你知道吗?
  6. 怎么使用java初始化链表_Java 链表(LinkNode)的简单操作:初始化,遍历,插入,删除等...
  7. python 爬虫可视化编程_Python爬虫爬取博客实现可视化过程解析
  8. 经济情况越不好越要做好这三点
  9. spring自动注入模型
  10. qq android qav,33 BK.QQAVManager 音视频管理
  11. Web前端助手-功能丰富的Chrome插件
  12. DSP eCAP脉冲捕获实验
  13. 一个VC编写的虚拟桌面软件
  14. python设计迷宫_用Python制作迷宫GIF
  15. hdu 1207 汉诺塔II (四柱汉诺塔)
  16. 利用selenium库实现QQ空间点赞
  17. 喂,你要多吃点含乳酸菌的食品
  18. CCF推荐会议 | 软件工程:截稿日期纵览(含SAS,ASE等)
  19. Educational Codeforces Round 124 (Rated for Div. 2)D. Nearest Excluded Points
  20. python无法定位到table_爬虫无法定位到tbody下的tr求助!!!!

热门文章

  1. 服务器时间 验证码不显示,时间不同步导致网页验证码不能正常显示解决方法...
  2. 注会会计-会计账户与记账方法
  3. 红木整装——成为现代装修行业中的新宠
  4. 在MATLAB环境下使用深度学习网络DeepLabV3+进行语义分割(云图分割)
  5. NFT Insider #54:BreederDAO将开启公募,游戏巨头万代南梦宫、育碧入局元宇宙
  6. 全差分运放阻抗匹配计算(三)
  7. 微信公众号 语音转文字api_原来微信不仅能实现语音转文字,还能实现文字转语音!你还不知吗...
  8. 理想评价鸿蒙系统,鸿蒙系统来了!前期如何发育?后期的潜力有多大?苹果真豁口了!...
  9. mysql是大端小端_大端和小端 - HackerVirus - 博客园
  10. 计算机打印范围如何设定,cad如何设定打印范围