dma_alloc_writecombine
2014-02-13 13:39
295 查看
dma_alloc_writecombine
分类:
1、页对齐内存大小:dma_map_size = PAGE_ALIGN(MY_DATA_SIZE + PAGE_SIZE);
MY_DATA_SIZE是你想分配的大小.
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是物理地址。对任意一个操作都将改变缓冲区内容。当然要注意操作环境。
参见S3C2410 LCD驱动中的函数s3c2410fb_map_video_memory():
unsigned map_size = PAGE_ALIGN(info->fix.smem_len);
info->screen_base = dma_alloc_writecombine(fbi->dev, map_size,&map_dma, GFP_KERNEL);
分类:
1、页对齐内存大小:dma_map_size = PAGE_ALIGN(MY_DATA_SIZE + PAGE_SIZE);
MY_DATA_SIZE是你想分配的大小.
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是物理地址。对任意一个操作都将改变缓冲区内容。当然要注意操作环境。
参见S3C2410 LCD驱动中的函数s3c2410fb_map_video_memory():
unsigned map_size = PAGE_ALIGN(info->fix.smem_len);
info->screen_base = dma_alloc_writecombine(fbi->dev, map_size,&map_dma, GFP_KERNEL);
相关文章推荐
- dma_alloc_coherent vs. dma_alloc_writecombine
- 使用dma_alloc_writecombine申请内存空间大小的限制
- dma_alloc_writecombine
- dma_alloc_writecombine和dma_alloc_coherent的区别
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine
- dma_alloc_writecombine
- dma_alloc_writecombine和dma_alloc_coherent的区别
- dma_alloc_writecombine 和mmap函数
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine
- dma_alloc_writecombine
- dma_alloc_writecombine
- dma_alloc_writecombine
- DMA及cache一致性的学习心得 --dma_alloc_writecombine
- dma_alloc_writecombine
- DMA及cache一致性的学习心得 --dma_alloc_writecombine
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine (转)
- dma_alloc_writecombine
- dma_alloc_coherent 与 dma_alloc_writecombine
- 宋宝华:关于DMA ZONE和dma_alloc_coherent若干误解的澄清