大家都知道,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_writecombine(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的的任意一个进行操作,都会改变这段内存缓冲区的内容。

最新文章

  1. CSS导航菜单水平居中的多种方法
  2. 7_nodejs angularjs
  3. 东哥读书小记 之 《MacTalk人生元编程》
  4. ORACLE的SQL JOIN方式小结
  5. vuex 笔记
  6. 树莓派安装Transmission-daemon出现的问题
  7. CSS3 Media Queries 片段
  8. 了解linux下RAID(磁盘阵列)创建和管理
  9. SAP RFC通信模式
  10. Stackoverflow架构
  11. mysql监控管理工具--innotop
  12. jquery点击图片选中特效
  13. 6_StopWatch
  14. Python之异步IO&RabbitMQ&Redis
  15. JS常用特效方法总结
  16. 201521123019 《Java程序设计》第11周学习总结
  17. 使用GDAL库中的RPC校正问题
  18. 第十四周翻译-《Pro SQL Server Internals, 2nd edition》
  19. Bellman_ford模板
  20. pandas文件写入读取操作

热门文章

  1. gtid 1032错误案例
  2. vue 手机物理返回键关闭弹框
  3. java+批量下载大文件
  4. hdu 1297
  5. Killer Problem (UVA 11898 )
  6. 【WebStorm】前端工具开发利器webstrom专篇
  7. 修改hive 默认fs为s3 遇到的坑
  8. Java写入的常用技巧
  9. mysql5.7以上基本配置
  10. http1.1管线话 vs htttp2.0 多路复用