【转】scatterlist && DMA】的更多相关文章

原文:scatterlist && DMA DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制.使用DMA可以是系统CPU从实际的IO数据传输过程中摆脱出来,从而大大提 供系统的吞吐率.DMA方式的数据传输由DMA控制器(DMAC)控制,在传输期间,CPU可以并发地执行其他任务,当DMA结束后,DMAC通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后续处理. 在内存中用于与外设交互数据的一块区域被称作DMA缓冲区,在设备不支持sca…
转自:http://blog.csdn.net/lihaoweiv/article/details/6275241 第 13 章  mmap 和 DMA 本章将深入探讨 Linux 内存管理部分,并强调了对设备驱动程序编写者非常有帮助的技术重点.这一章内容属于高级主题,不需要所有人都掌握它,虽然如此,很多任务只能通过更深入地研究内存管理子系统而做到,同时本章也帮助读者了解内核重要组成部分的工作方式. 本章内容分为三节.第一节讲述了 mmap 系统调用的实现,mmap允许直接将设备内存映射到用户进…
1.1 当我们在应用程序中编写write系统调用,向磁盘中写入数据时,写入请求会先调用底层写函数,将请求先写入内存中的页快速缓存(page cache)中,写入成功则立马返回,真正的写入磁盘操作会延迟运行.Page cache是硬盘在内存中的一个缓存,是linux内核所使用的主要磁盘快速缓存,在绝大多数情况下,内核在读写磁盘时都引用page cache(极少数应用会绕过页快速缓存,如数据库软件). 当把page cache中的一页数据写到块设备之前,内核首先检查相应的页是否已经在快速缓存中,假设…
#include <linux/module.h> #include <linux/slab.h> #include <linux/sched.h> #include <linux/mman.h> #include <linux/init.h> #include <linux/dma-mapping.h> #include <linux/fs.h> #include <linux/version.h> #inc…
一.前言 这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程.另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的. 二.从CPU角度看到的地址和从DMA控制器看到的地址有什么不同? 在DMA API中涉及好几个地址的概念(物理地址.虚拟地址和总线地址),正确的理解这些地址是非常重要的. 内核通常使用的地址是虚拟地址.我们调用kmalloc().vmalloc()或者类似的接口返…
1. 前言 我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1].Video.Audio等)中,经常看到scatterlist的影子.对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了.scatter可翻译成“散开.分散”,list是“列表”的意思,因而scatterlist可翻译为“散列表”.“散列表”又是什么?太抽象了! 之所以抽象,是因为这个词省略了主语----物理内存(Physical memory),加上后,就好理解了多了,既:物理内存的散列表.再通俗一些,就是…
简单介绍 很多类型的驱动程序编程都须要了解一些虚拟内存子系统怎样工作的知识 当遇到更为复杂.性能要求更为苛刻的子系统时,本章所讨论的内容迟早都要用到 本章的内容分成三个部分 讲述mmap系统调用的实现过程 讲述怎样跨越边界直接訪问用户空间的内存页 讲述了直接内存訪问(DMA)I/O操作,它使得外设具有直接訪问系统内存的能力 Linux的内存管理 地址类型 Linux是一个虚拟内存系统,这意味着用户程序所使用的地址与硬件使用的物理地址是不等同的 有了虚拟内存,在系统中执行的程序能够分配比物理内存很…
说起DMA我们并不陌生,但是实际编程中去用的人不多吧,最多就是网卡驱动里的环形buffer,再有就是设备的dma,下面我们就分析分析.   DMA用来在设备内存和内存之间直接数据交互.而无需cpu干预  内核为了方便驱动的开发,已经提供了几个dma 函数接口.dma跟硬件架构相关,所以linux关于硬件部分已经给屏蔽了,有兴趣的可以深入跟踪学习. 按照linux内核对dma层的架构设计,各平台dma缓冲区映射之间的差异由内核定义的一个dma操作集 include/linux/dma-mappin…
一.DMA简介 DMA(Direct Memory Access,直接内存存取),DMA传输将数据从一个地址空间复制到另外一个地址空间.传输过程由DMA控制器独立完成,它并没有拖延CPU的工作,可以让CPU效率提高. 既然DMA用于传输,那么就需要具备传输三要素:源.目的.长度.在传输完成后,DMA会通过产生中断的方式汇报. 由于DMA不使用页表机制,因此必须分配连续的物理内存,这一点需要我们注意,我们可以使用dma_alloc_writecombine()或dma_alloc_coherent…
本章内容分为三个部分: 第一部分讲述了mmap系统调用的实现过程.将设备内存直接映射到用户进程的地址空间,尽管不是所有设备都需要,但是能显著的提高设备性能. 如何跨越边界直接访问用户空间的内存页,一些相关的驱动程序需要这种能力.在很多情况下,内核执行了该种映射,而无需驱动程序的参与. 直接内存访问(DMA)I/O操作,它使得外设具有直接访问系统内存的能力. 一.Linux的内存管理 关注Linux内存管理实现的主要特性,而非讲述操作系统中内存管理的理论. 1.1 地址类型 Linux是一个虚拟内…