linux DMA接口知识点详解
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,1.两种DMA映射类型1.1. 一致性DMA映射(Consistent DMA mappings )主要用于映射长时间使用的区域。CPU和DMA controller不需要考虑cache的影响。这里的
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
互联网科技园
互联网科技海报
互联网核心科技是什么
金融科技还是互联网
互联网科技公司怎么样
互联网科技作文
无线互联网科技
互联网养老 桔豆科技
金融科技与互联网金融相同和不同
湖南诚度互联网科技有限公司
成都铂石互联网科技做什么的
注册互联网科技公司经营范围大全
佛山市拉法互联网科技有限公司
伊宁互联网科技做什么的
伍佰万互联网科技怎么赚钱
江苏苏星互联网科技有限公司
广州富喜互联网络科技
青岛易易互联网科技
优雇互联网科技有限公司
前海云享互联网科技
咖啡网
互联网科技
互联网科技股
重生之互联网科技帝国
互联网科技博客
昭通互联网科技选哪家
互联网科技人工智能实验室
明优互联网科技有限公司
中科明德北京互联网科技
10位科技互联网大佬