【Linux开发】linux中关于dma_alloc_coherent的用法
来源:互联网 发布:亮化动画设计软件 编辑:程序博客网 时间:2024/06/14 15:58
大家都知道,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的的任意一个进行操作,都会改变这段内存缓冲区的内容。
0 0
- 【Linux开发】linux中关于dma_alloc_coherent的用法
- linux中关于dma_alloc_coherent的用法
- linux中关于dma_alloc_coherent的用法
- Linux中关于scp的用法
- [linux] 关于linux中vi编辑的用法
- linux关于VI的用法
- 关于Linux中top命令用法的详解
- 关于Linux中CP命令用法的一些冷知识
- Linux中关于find指令的用法以及whereis指令
- 关于linux内核驱动开发中Makefile编译的问题
- linux中for的用法
- linux中for的用法
- linux中for的用法
- linux中for的用法
- linux中for的用法
- linux中for的用法
- linux中for的用法
- linux中for的用法
- SQL的简单应用
- MD5、钥匙串与Base64
- 勾股定理一日一证连载7
- CSS基础二:CSS模型
- NSRunLoop消息循环
- 【Linux开发】linux中关于dma_alloc_coherent的用法
- Set up Docker/Debian/VirtualBox/Win7
- 断点缓存
- CF 660B 排座位
- [疯狂Java]集合:Deque(双端队列)以及两个实现(ArrayDeque、LinkedList)、Stack(摒弃)、各线性表性能分析
- Nmap详解
- 小画板
- Install OpenCV-3.1.0 fails on Ubuntu 16.04 (‘memcpy’ was not declared in this scope)
- 安卓Missing styles解决方法