linux DMA接口知识点详解
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,1.两种DMA映射类型1.1. 一致性DMA映射(Consistent DMA mappings )主要用于映射长时间使用的区域。CPU和DMA controller不需要考虑cache的影响。这里的
千家信息网最后更新 2025年11月13日linux DMA接口知识点详解
1.两种DMA映射类型
1.1. 一致性DMA映射(Consistent DMA mappings )
主要用于映射长时间使用的区域。
CPU和DMA controller不需要考虑cache的影响。
这里的consistent实际上是coherent的概念,不能保证consistent,也就是说需要memory barrier来保证memory order。
1.2 流式DMA映射(streaming DMA mapping)
主要用于一次性DMA传输,传输完成后就会释放。
2.指定DMA设备的寻址范围
include/linux/dma-mapping.h
// 用于一致性内存映射的映射范围static inline int dma_set_coherent_mask(struct device *dev, u64 mask)// 用于流式内存映射的映射范围static inline int dma_set_mask(struct device *dev, u64 mask);
3.DMA映射接口
3.1一致性DMA接口
分配较大DMA buffer
// dev DMA控制器设备// size 要分配的DMA buffer大小// dma_handle 返回DMA buf的物理地址// flag 分配标志// 返回值 DMA buffer的虚拟地址void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag) // dev DMA控制器设备// size 释放的DMA buffer大小// cpu_addr DMA buf的虚拟地址// dma_handle DMA buf的物理地址void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle)
分配较小DMA buffer,从dma poll中申请。
/** * dma_pool_alloc - 从dma poll获得一块一致性内存 * @pool: 产生内存块的dma pool * @mem_flags: GFP_* bitmask * @handle: 返回内存块的dma地址 */void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)/** * dma_pool_free - 将内存释放回dma pool * @pool:产生内存块的dma pool * @vaddr: 内存块的虚拟地址 * @dma: 内存块的物理地址 */void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma)
3.2 流式DMA接口
// dev 需要映射内存的设备// ptr 映射的buffer虚拟地址// size 映射的大小// dir 传输方向// attr 属性// 返回值 dma物理地址dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, unsigned long attrs)// dev 需要映射内存的设备// addr dma区域的物理地址// size 映射的大小// dir 传输方向// attr 属性void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs)
page映射
dma_addr_t dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction dir)void dma_unmap_page(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir)
返回dma映射错误
// 返回dma映射错误int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
映射scatterlist
int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, unsigned long attrs)void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, unsigned long attrs)// 返回map后的dma地址和长度sg_dma_address(struct scatterlist *sg)sg_dma_len(struct scatterlist *sg)
sync操作
void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr,size_t size,enum dma_data_direction dir)void dma_sync_single_for_device(struct device *dev,dma_addr_t addr, size_t size,enum dma_data_direction dir)voiddma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,int nelems, enum dma_data_direction dir)voiddma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,int nelems, enum dma_data_direction dir)
以上就是本次介绍的全部相关知识点,如果大家有任何补充可以联系小编。
内存
地址
物理
设备
一致
一致性
大小
传输
分配
接口
范围
区域
属性
控制器
方向
错误
保证
控制
知识
知识点
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
超越安全网络专用服务器
怎么制作金币服务器
库尔勒互联网科技有哪些
网络安全性的问题
2022年最先进的数据库
网络安全攻击的形式有哪几种
hp 服务器raid1
天下布魔服务器连接失败
设备管理 软件开发平台
2018互联网科技热点
网络安全问题举报
德州网络安全宣传周
用友软件开发的前景怎么样
北京优德网络技术
邵阳智能软件开发价格
瀛洲租房软件开发
网络安全课班会教案
应用软件开发右脑训练
新闻联播信息化网络安全
数据库++ole
穿越火线频道选择服务器异常
怎么解决数据库热点
网络安全始于心横版海报
软件开发南京招聘
欢唱KTV招音响网络技术
数据库管理技术在哪里
达内培训软件开发
丹东悠逸网络技术有限公司贵州
网络服务器安全访问系统
海康威视监控管理服务器