首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

32.Linux-2440下DMA驱动(详解)

来启动DMA 由于我们是用字符设备测试方法测试,而本例子只是用两个地址之间拷贝来演示DMA作用,所以采用字符设备方式编写 1.驱动编写之前,先来讲如何分配释放缓冲区、DMA相关寄存器介绍、使用...DMA中断 1.1在linux中,分配释放DMA缓冲区,只能使用以下几个函数 1)  /*该函数只禁止cache缓冲,保持写缓冲区,也就是对注册物理区写入数据,也会更新到对应虚拟缓存区上*/ void...和DMASKTRIGn[1]=1才有效,DMA传输时,该位自动清0 1.3接下来就开始讲linux注册DMA中断 首先,DMA每个通道只能有一个源- >目的,所以输入命令 cat /proc/interrupts...,还是直接两个地址之间拷贝 -> 2.2)若是DMA启动,则设置DMA相关硬件,并启动DMA传输 2.1 所以,驱动代码如下所示: #include #include... #include #include #include #include <linux

3.7K90

宋宝华:那些年你误会Linux DMA(关于Linux DMA ZONE和API最透彻一篇)

创作目的 互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等各种讲解,由于很多童鞋缺乏自身独立思考,人云亦云...那么ISA上面假设有个网卡,要DMA,超过16MB以上内存,它根本就访问不到。所以Linux内核干脆简单一点,把16MB砍一刀,这一刀以下内存单独管理。...比如我在CSR工作时候,CSRprimaII芯片,尽管除SD MMC控制器以外所有的DMA都可以访问整个4GB内存,但MMC控制器DMA只能访问256MB,我们就把primaII对应Linux...下面我们架空历史,假设有一个如下芯片,里面有5个DMA,A、B、C都可以访问所有内存,D只能访问32MB,而E只能访问64MB,你觉得Linux设计者会把DMA ZONE设置为多大?...DMA ZONE作用是让有缺陷DMA对应外设驱动申请DMA buffer时候从这个区域申请而已,但是它不是专有的。其他所有人内存(包括应用程序和内核)也可以来自这个区域。 ?

6.6K46

【深入探讨】DMA到底能不能起到加速程序执行作用DMA死等操作是否合理,多个DMA数据流同时刷是否处理过来

一、DMA到底能不能起到加速作用 初学时候,很容易存在这样认识,DMA直接从一个外设到另一个外设数据传输,少了CPU参与,直接硬件传输,应该可以做到更快。...2、DMA2D,MDMA和CPU复制粘贴性能差不多。 3、CPU操作ITCM数据粘贴性能最强。 那么DMA到底能不能起到加速作用? 1、如果相比CPU复制粘贴来说,基本没什么加速作用。...2、如果从程序执行效果来看,可以起到明显加速效果,特别是MDMA和DMA2D,因为DMA刷新期间,CPU可以腾出手来干别的事情,这个才是DMA最大作用。...3、另外像DMA2D做它本职工作,比如颜色格式转换等操作,有明显加速作用,这个比CPU要快。...还有像H7SDMMC带IDMA和以太网带DMA,这些是外设专属DMA,不需要CPU参与,从程序执行效果上也能起到加速作用

1.1K20

LINUX网络子系统中DMA机制实现

我们先从计算机组成原理层面介绍DMA,再简单介绍Linux网络子系统DMA机制是如何实现。 一、计算机组成原理中DMA 以往I/O设备和主存交换信息都要经过CPU操作。...“图1”中“接口”既包括实现某一功能硬件电路,也包括相应控制软件,如 “DMA接口” 就是一些实现DMA机制硬件电路和相应控制软件。 “DMA接口”有时也叫做“DMA控制器”(DMAC)。...总之,在同样时间内,DMA方式下CPU执行现行程序时间最长,即CPU效率最高。 二、Linux网络子系统中DMA机制实现 1..../include/linux/dma-mapping.h /* * Set both the DMA mask and the coherent DMA mask to the same thing...()作用是申请一块DMA可使用内存,它返回值是这块内存虚拟地址,赋值给rxdr->desc。

4.9K62

傻傻分不清楚MDMA, DMA1,DMA2, DMA2D,BDMA?

最近一直在使用H743这颗料,主频跑400M,很多外设在使用时都开了DMA,性能杠杠,推荐大家多使用。...如SDRAM, QSPI,SPI等,H743里面DMA比较多,也较复杂,有DMA2D,MDMA, BDMA,DMA1,DMA2等等,使用时候注意区分。 MDMA 先来看看MDMA框图概览 ?...更多关于MDMA说明可以参考手册使用,结合官方例程。 DMA H743有两个DMA,分别为DMA1和DMA2, ? ? ?...DMA知识和篇章在参考手册中有很多介绍需要详细阅读和参考,结合例程。 DMA2D DMA2D是专门用于图像处理加速DMA,我们在做屏驱动时候可以充分考虑使用。 ?...手册中有几十页都是来讲DMA2D,这个功能还是很好,如果你使用H743做屏幕类相关产品,这个要用起来。例如我在移植emWIN作为图形界面时候驱动就使用了DMA2D. ? ?

2K20

扒开DMA映射内裤

无论哪种,本质都是避免cache带来影响,要么一步到位直接把cache关了,要么只在dma传输数据过程中才关cache。不过很明显前者由于关了cache,则会带来性能影响。...比如DMA传输完成之后,CPU去把这个DMA buffer数据取过来,这时候cache关闭,CPU去读写就变得很慢。 这里介绍个即可以保证DMA传输一致性,又能提高性能方法:流式DMA映射。...「DMA_TO_DEVICE」:从图里看到,CPU需要进行DMA写操作,也就是把内存中buffer A写入到设备FIFO A里面,那么有可能cache里面的数据还没有完全写入到内存buffer A...「DMA_FROM_DEVICE」:我们来看一下DMA情况,CPU想把设备FIFO B数据读到内存buffer B中。...那如果在开启DMA传输时候没有去把内存buffer B相应cache invalid的话,那么DMA把数据从FIFO B到了内存Buffer B之后,CPU去读这个内存Buffer B数据,那么会把之前残留在

4.3K31

探索计算机IO控制方式:了解DMA控制器作用与优势

DMA控制器是在学习Java零拷贝技术时经常提到一个概念。它作用是让设备在没有CPU参与情况下,能够自行将设备输入/输出数据传输到内存中。要实现DMA功能,需要有硬件上支持,即DMA控制器。...那么我们来看看DMA是如何帮CPU解决问题DMA 工作方式如下:首先,CPU向DMA控制器发送指令,告知需要读取内容以及存储数据内存地址。...一旦磁盘控制器完成将数据传输到内存操作,它会通过总线向DMA控制器发送一个确认成功信号。当DMA控制器接收到确认信号后,它会发送中断通知给CPU,告知数据传输已经完成。...这样可以极大地提高系统并发性和响应能力。有人可能会质疑:为什么DMA效率比中断高呢?磁盘控制器完成读取后只需向CPU发送一个中断,DMA完成后也需要发送一个中断,所以它们不是一样吗?...最后,我们介绍了设备驱动程序作用和重要性。设备驱动程序是操作系统一部分,它提供了一个接口,使得操作系统能够统一管理不同设备控制器操作。

23520

没有IOMMUDMA操作

我们知道DMA通常需要访问连续物理内存,除非设备支持iommu,当设备不支持iommu的话可以用以下方式: 在内核启动时为设备保留内存 将MMU内嵌到设备中,如GPU 这里GPU MMU方式算是个例外...至此,dma_alloc_coherent分配流程就完成了。...流式映射 dma_map_single 因为DMA受32位访问限制,所以只能访问0x0000_0000到0xFFFF_FFFF地址空间内存,再加上DMA需要访问连续物理内存,故coherent...); } CPU访问内存转为DMA地址 判断DMA寻址能力是否能够覆盖上一步得到地址,如果能的话,直接返回地址,否则采用swiotlb机制分配内存。...通过map_single用swiotlb机制分配内存,详情见上面 至此,CPU对应Data Buffer和DMA对应Bounce Buffer就映射起来了 数据同步 ?

2.5K11

linux 虚拟内存作用

虚拟内存作用 利用磁盘起到缓存作用,提高进程访问磁盘速度。 虚拟内存可以为进程提供独立内存空间,并通过动态链接库共享内存。...在其中使用就是局部性原理,当操作系统访问未被缓存页,就会发生缺页中断,操作系统需要将磁盘上未被缓存虚拟页加载到物理内存中。...目前linux系统,采用四层页表结构页表结构,每个9位,最低12位作为偏移量。...总 虚拟内存可以结合磁盘和物理内存优势为进程提供看起来速度足够快并且容量足够大存储; 虚拟内存可以为进程提供独立内存空间并引入多层页表结构将虚拟内存翻译成物理内存,进程之间可以共享物理内存减少开销...,也能简化程序链接、装载以及内存分配过程; 虚拟内存可以控制进程对物理内存访问,隔离不同进程访问权限,提高系统安全性;

3.4K20

Linux目录作用【值得收藏】

/dev:存放linux系统下设备文件,访问该目录下某个文件,相当于访问某个设备,常用是挂载光驱 mount /dev/cdrom /mnt /etc :系统管理文件和配置文件放置处,需要配置服务等等时候访问.../home :用户主目录基点,比如用户user主目录就是/home/user,可以用~user表示 /sbin :超级管理命令,这里存放是系统管理员使用管理程序,用户可以使用哪些管理程序 /tmp...:公共临时文件存储点 /root :系统管理员主目录 /var :某些大文件溢出区,大多数存日志信息 /user :软件放置处 /boot :存放开机及内核文件 /opt:给主机额外安装软件所摆放目录.../bin: /usr/bin: 可执行二进制文件目录,如常用命令ls、tar、mv、cat等 ?

2.2K30

Linux】open函数参数和作用

大家好,又见面了,我是你们朋友全栈君。 一、open函数用来干什么 open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要文件属性和用户权限等各种参数。...二、open函数定义和参数 我们首先来看下open函数在Linux定义 #include #include #include <fcntl.h...要注意是,有以下几点 文件权限由openmode参数和当前进程umask掩码共同决定。...第三个参数是在第二个参数中有O_CREAT时才作用,如果没有,则第三个参数可以忽略 三、open函数与fopen函数区别 从来源来分,这两者很好区分: open函数是Unix下系统调用函数,操作成功返回是文件描述符...,操作失败返回是-1, fopen是ANSIC标准中C语言库函数,所以在不同系统中调用不同内核API,返回是一个指向文件结构指针。

3.3K10

Linux mmap 作用是什么?

表示要映射到内存区域起始地址,通常用 NULL,表示由内核指定该内存地址。...length 表示映射区长度,单位字节。 prot 参数描述了映射所需内存保护(并且不得与文件打开模式冲突)。...它值可以是一个或者多个以下位组合体: MAP_FIXED //使用指定映射起始地址,如果由start和len参数指定内存区重叠于现存映射空间,重叠部分将会被丢弃。...如果指定起始地址不可用,操作将会失败。并且起始地址必须落在页边界上。 MAP_SHARED //与其它所有映射这个对象进程共享映射空间。对共享区写入,相当于输出到文件。...4.作用 mmap 主要有两点作用: 文件映射,减少数据拷贝,提高 IO 效率。 将文件映射到进程地址空间。

24130

几种应用DMA典型应用

DMA内部寄存器读写方式 基于AXIDMA对内部寄存器读写有着相同方式。...几种应用DMA场合 表4‑20三种DMA应用场合 类型 应用场合 AXI DMA AXI DMA 应用在系统内存和基于总线AXI4-Stream外设之间高速数据传输,比如控制以太网数据交换。...AXI Video DMA AXI VDMA 应用在系统内存和基于总线AXI4-Steam视频外设高速数据传输。 几种应用DMA典型应用 (1) AXI DMA ?...Scatter-gather DMA 与 block DMA 传统block DMA 一次只能传输物理上连续一个块数据, 完成传输后发起中断。...而scatter-gather DMA允许一次传输多个物理上不连续块,完成传输后只发起一次中断。 传统block DMA像这样: ? 先进scatter-gather DMA像这样: ?

2.3K20

Linux目录结构和作用

这是最庞大目录,要用到应用程序和文件几乎都在这个目录。.../usr/x11r6 存放x window目录 /usr/bin 众多应用程序 /usr/sbin 超级用户一些管理程序 /usr/doc Linux文档 /usr/include linux下开发和编译应用程序所需要头文件.../usr/lib 常用动态链接库和软件包配置文件 /usr/man 帮助文档 /usr/src 源代码,linux内核源代码就放在/usr/src/linux里 /usr/local/bin 本地增加命令.../usr/local/lib 本地增加库 /opt 额外安装可选应用程序包所放置位置。...共享库又叫动态链接共享库,作用类似windows里.dll文件,存放了根文件系统程序运行所需共享文件。 /tmp 用于存放各种临时文件,是公用临时文件存储点。

1.2K10

linux | 数据包到网卡在通过DMA到内存过程

要利用其硬件 DMA 功能,设备驱动程序需要能够正确设置 DMA 传输并与硬件同步。不幸是,由于其硬件性质,DMA 非常依赖于系统。...每种体系结构都有自己技术来管理 DMA 传输,并且每种体系结构编程接口都不同。内核也不能提供统一接口,因为驱动程序不能从底层硬件机制中抽象出太多。...然后驱动程序将网络数据包传递给内核其余部分,并在环中放置一个新 DMA 缓冲区。 所有这些情况下处理步骤都强调有效 DMA 处理依赖于中断报告。...虽然可以使用轮询驱动程序实现 DMA,但这没有意义,因为轮询驱动程序会浪费 DMA 提供性能优势,而不是更简单处理器驱动 I/O。 这里介绍另一个相关项目是 DMA 缓冲区。.../content/queueing-linux-network-stack

2.6K20

嵌入式:ARMDMA设计

文章目录 一、DMA工作原理 1. S3C2410结构框图 2. DMA请求源 3. DMA传输过程 4. S3C2410 DMA 基本时序 5. DMA服务模式 6....S3C2410 DMA 两种控制协议 7. S3C2410 DMA 三种协议类型 二、S3C2410ADMA控制器 1. 6个DMA控制寄存器。...DMA传输过程 采用DMA方式进行数据传输具体过程如下: (1)外设向DMA控制器发出DMA请求; (2)DMA控制器向CPU发出总线请求信号; (3)CPU执行完现行总线周期后,向DMA控制器发出响应请求回答信号...S3C2410 DMA 三种协议类型 单一服务请求 单一服务握手 整体服务握手: 二、S3C2410ADMA控制器 要进行DMA操作,首先要对S3C2410A相关寄存器进行正确配置。...每个DMA通道有9个控制寄存器,因此对于4通道DMA控制器来说总共有36个寄存器。其中每个DMA通道9个控制寄存器中有6个用于控制DMA传输,另外3个用于监控DMA控制器状态。

1.2K30
领券