返回顶部
首页 > 资讯 > 操作系统 >linux DMA接口知识点详解
  • 904
分享到

linux DMA接口知识点详解

linuxDMA接口 2022-06-04 23:06:19 904人浏览 薄情痞子
摘要

1.两种DMA映射类型 1.1. 一致性DMA映射(Consistent DMA mappings ) 主要用于映射长时间使用的区域。 CPU和DMA controller不需要考虑cache的影响。 这里的cons

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中申请。



void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
       dma_addr_t *handle)


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映射


daCLWHma_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,aCLWH 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)

void
dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
int nelems, enum dma_data_direction dir)

void
dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
int nelems, enum dma_data_direction dir)

以上就是本次介绍的全部相关知识点,如果大家有任何补充可以联系我们小编。

--结束END--

本文标题: linux DMA接口知识点详解

本文链接: https://lsjlt.com/news/20943.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • linux DMA接口知识点详解
    1.两种DMA映射类型 1.1. 一致性DMA映射(Consistent DMA mappings ) 主要用于映射长时间使用的区域。 CPU和DMA controller不需要考虑cache的影响。 这里的cons...
    99+
    2022-06-04
    linux DMA接口
  • Linux netfilter/iptables知识点详解
    Netfilter Netfilter是Linux内核中的一个数据包处理模块,它可以提供数据包的过滤、转发、地址转换NAT功能。Iptables是一个工具,可以用来在Netfilter中增加、修改、删除数据包处理规则...
    99+
    2022-06-03
    Linux netfilter iptables
  • 详解Java接口的相关知识
    一、接口概述 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法、成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前)、...
    99+
    2024-04-02
  • 详解Linux文件操作知识点
    文件操作的相关系统调用 创建 int creat(const char *filename, mode_t mode); 参数mode 指定新建文件的存取权限,它同umask 一起决定文件的最终权限(mode&umas...
    99+
    2022-06-04
    Linux 文件
  • javascript知识点详解
    目录一.JavaScript基本介绍二、Javascript基础语法三、JavaScript事件例子2:当点击div标签时,做一件事,如点击后弹出对话框。——用id类例子3:添加标签...
    99+
    2024-04-02
  • 接口测试的知识点总结
    这篇文章主要介绍“接口测试的知识点总结”,在日常操作中,相信很多人在接口测试的知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”接口测试的知识点总结”的疑惑有所帮助!接...
    99+
    2024-04-02
  • 详解linux dma驱动编写
    linux下面的驱动虽然什么样的情形都有,但是dma驱动却并不少见。dma可以有很多的好处,其中最重要的功能就是能够帮助我们将数据搬来搬去,这个时候cpu就由时间去做别的事情了,提高了设备效率。 1、dma驱动在什么地方...
    99+
    2022-06-04
    linux dma驱动
  • 详解Java注解知识点
    目录一、注解是什么二、jdk支持的注解有哪些2.1 三种常用的注解:2.2 元注解三、注解实例四、总结一、注解是什么 Java 注解用于为 Java 代码提供元数据,看完这句话也许你...
    99+
    2024-04-02
  • MySQL索引知识点详解
    这篇文章主要讲解了“MySQL索引知识点详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL索引知识点详解”吧!普通索引创建索引这是最基本的索引,它...
    99+
    2024-04-02
  • 【知识点】python的__init__详解
    介绍__init__方法的作用 __init__ 方法是 Python 中面向对象编程中类的特殊方法,也称为构造方法,当创建一个类的实例时,__init__ 方法会自动调用。 它的主要作用是初始化实例的属性,在实例被创建后,你可以通过这...
    99+
    2023-09-02
    python Powered by 金山文档
  • 了解Java和Linux接口框架的必备知识。
    了解Java和Linux接口框架的必备知识 Java和Linux都是当今应用最广泛的技术,它们的组合也是非常常见的。Java在企业级应用中的应用非常广泛,而Linux则是最受欢迎的服务器操作系统之一。在Java和Linux组合使用时,接口框...
    99+
    2023-07-04
    linux 接口 框架
  • linux基础知识-vmstat详解
    1. 前言 vmstat(VirtualMeomoryStatistics,虚拟内存统计)是一个不错的Linux/Unix监控工具,在性能测试中除了top外也是比较常用的工具之一,它可以监控操作系统的...
    99+
    2023-09-24
    linux 运维 服务器
  • linux基础知识-sar详解
    1.前言 sar(System Activity Reporter系统活动情况报告)是目前Linux比较全的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用...
    99+
    2023-08-19
    linux 服务器 运维
  • linux运维知识点
    Linux作为一种开源操作系统,被广泛地应用于企业、政府和私人用户的计算机系统中,其优越的稳定性、安全性和灵活性使得 Linux 成为了云计算、大数据和人工智能等最热门领域的重要组成部分。对于从事 Linux 运维的人员来说,了解其知识点和...
    99+
    2023-10-01
    linux 运维 服务器
  • JS闭包的知识点详解
    本篇内容主要讲解“JS闭包的知识点详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS闭包的知识点详解”吧!一、什么是闭包学习一个陌生的概念,我们首先要去明白...
    99+
    2024-04-02
  • java伪泛型知识点详解
    说明 1、Java中的泛型是伪泛型。这种泛型实现方法称为类型擦除 ,基于这种方法实现的泛型称为伪泛型。 2、由于Java的泛型只在编译阶段发挥作用,因此在写代码时,起到了检查的作用,...
    99+
    2024-04-02
  • 接口开发小知识
    关于数据库设计 接口开发多学习数据库表操作,这是要点 不存在删除数据,每个可能被删除数据的表加一个is_active属性 不同的表可以有多个相同的字段,字段属性少用禁止非空 不要设置太多主外键(高内聚,低耦合) 用户表应该要有权限字段,...
    99+
    2023-01-31
    小知识 接口
  • Hibernate中5个核心接口知识点整理
    Hibernate是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库,同时Hibernate作...
    99+
    2024-04-02
  • 怎么理解Linux shell的知识点
    这篇文章给大家介绍怎么理解Linux shell的知识点,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我个人很喜欢使用 Linux 系统,虽然说 Windows 的图形化界面做的确实比 Linux ...
    99+
    2023-06-05
  • 详解Java泛型(知识点总结)
    概念来源:Java在设计开始之前不是通用的,直到它在JDK 1.5中被引入。Java泛型是通过擦除实现的。你知道什么是擦除吗?往下看。概念:常规类和方法只能使用特定类型;基本类型或自定义类。如果要编写可应用于多种类型代码的代码,这种严格的限...
    99+
    2021-05-06
    java入门 Java 泛型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作