linux DMA接口知识点详解
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,1.两种DMA映射类型1.1. 一致性DMA映射(Consistent DMA mappings )主要用于映射长时间使用的区域。CPU和DMA controller不需要考虑cache的影响。这里的
千家信息网最后更新 2025年02月06日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安全错误
数据库的锁怎样保障安全
万方数据库收录年代
三级网络技术2021教材pdf
华为单板软件开发
拼测服务器出现拼测延时
微信小程序后台数据库
为什么网络异常服务器错误
数据库恢复的常用技术
独立服务器有什么坏处
生活中网络安全常识
网络技术的前沿应用
软件开发能力技术水平介绍
数据库基础实例教程综合实训答案
全国中学生电视网络安全知识
怎么查城市垃圾数据库
网络安全攻防有哪些方面
怎么学好数据库6
中科院的网络安全专业
通信的网络技术
无人驾驶安全与网络安全
js服务器文件管理
数据库怎么跨服务器访问数据
打开别人的表格看不了数据库
最新数据库软件
中山正规的模具制造管理软件开发
张远明 服务器 安全
2020服务器芯片市场占有率
游戏软件开发与软件工程的关系
新乡市出彩网络技术有限公司
app最简单的数据库
cs go 官方服务器