dma_alloc_writecombine
2015-06-05 17:40
239 查看
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);
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);
相关文章推荐
- Accept 惊群现象测试perl脚本
- 《一万年以后》影评
- 高性能mysql笔记---schema与数据结构[-3-]
- Spring mvc4使用JSON包变更
- 实现图文混排ListView展示 ---- Android版
- ASP.NET MVC5项目自带的一段代码( ViewBag.StatusMessage = message == ManageMessageId.ChangePas
- 使用 jQuery 创建自己的插件
- iOS中的动画
- ffmpeg work flow
- java版sqlhelper(转载)
- Linux下内核socket优化项
- 前期细节问题
- c++类中特殊数据类型成员变量的初始化
- onInterceptTouchEvent与OnTouchEvent事件机制
- DayDayUP_Linux运维学习_查看linux版本的方法2
- Activator.CreateInstance 方法 (Type) 的用法
- Eddy's mistakes(字母大小写转换)strlwr函数的应用
- busybox号称linux下的瑞士小军刀
- Linux下使用Eclipse开发C\C++
- android view 的学习