dma_alloc_coheren
2024-05-09 09:37:50
大家都知道,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相关推荐
- 【引用】DMA内存申请--dma_alloc_coherent
在项目驱动过程中会经常用到dma传输数据,而dma需要的内存有自己的特点,一般认为需要物理地址连续,并且内存是不可cache的,在linux内核中提供一个供dma所需内存的申请函数dma_alloc_ ...
最新文章
- mongoengine中queryset触发网络访问机制剖析
- linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...
- strcut结构体和char型数组的相互转化
- 在Ubuntu/Fedora/CentOS中安装Gitblit
- storm在运行过程中会自动调整拓扑吗_干粉灭火器灌装机的操作你知道吗?
- 怎么使用java初始化链表_Java 链表(LinkNode)的简单操作:初始化,遍历,插入,删除等...
- python 爬虫可视化编程_Python爬虫爬取博客实现可视化过程解析
- 经济情况越不好越要做好这三点
- spring自动注入模型
- qq android qav,33 BK.QQAVManager 音视频管理
- Web前端助手-功能丰富的Chrome插件
- DSP eCAP脉冲捕获实验
- 一个VC编写的虚拟桌面软件
- python设计迷宫_用Python制作迷宫GIF
- hdu 1207 汉诺塔II (四柱汉诺塔)
- 利用selenium库实现QQ空间点赞
- 喂,你要多吃点含乳酸菌的食品
- CCF推荐会议 | 软件工程:截稿日期纵览(含SAS,ASE等)
- Educational Codeforces Round 124 (Rated for Div. 2)D. Nearest Excluded Points
- python无法定位到table_爬虫无法定位到tbody下的tr求助!!!!
热门文章
- 服务器时间 验证码不显示,时间不同步导致网页验证码不能正常显示解决方法...
- 注会会计-会计账户与记账方法
- 红木整装——成为现代装修行业中的新宠
- 在MATLAB环境下使用深度学习网络DeepLabV3+进行语义分割(云图分割)
- NFT Insider #54:BreederDAO将开启公募,游戏巨头万代南梦宫、育碧入局元宇宙
- 全差分运放阻抗匹配计算(三)
- 微信公众号 语音转文字api_原来微信不仅能实现语音转文字,还能实现文字转语音!你还不知吗...
- 理想评价鸿蒙系统,鸿蒙系统来了!前期如何发育?后期的潜力有多大?苹果真豁口了!...
- mysql是大端小端_大端和小端 - HackerVirus - 博客园
- 计算机打印范围如何设定,cad如何设定打印范围