首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux之DMA动态照射指南

2012-09-15 
linux之DMA动态映射指南DMA动态映射指南什么样的内存是DMA可用的?DMA寻址限制DMA映射类型使用DMA一致性映

linux之DMA动态映射指南

DMA动态映射指南

什么样的内存是DMA可用的?

DMA寻址限制

DMA映射类型

使用DMA一致性映射

DMA方向

使用DMA流映射

错误处理

平台相关的问题

如果你只是些一个linux驱动而不需要为内核维护一个体系结构你可以跳过本章。

1)数据结构scatterlist的条件

不要发明新的体系结构相关的scatterlist;使用<asm-generic/scatterlist.h>就可以了。如果体系结构支持IOMMU(包括软件IOMMU),你就需要使能CONFIG_NEED_SG_DMA_LENGTH。

2)ARCH_DMA_MINALIGN

体系结构必须确保kmalloc申请的缓冲区对DMA来说是安全的。驱动及子系统都依赖于此。如果一个体系结构并非是一致性DMA(比如硬件不能保证在处理器缓存中的数据和主内存中的数据时刻保持一致),则必须要设置ARCH_DMA_MINALIGN来确保kmalloc缓冲区不会和其他缓冲区共享一个缓存行。实例请看arch/arm/include/asm/cache.h。

请注意ARCH_DMA_MINALIGN和DMA内存对齐限制相关。你无需担心体系结构数据对齐限制。

3)支持多种类型的IOMMU

如果你的体系结构需要支持多种IOMMU,那么你可以使用 include/linux/asm-generic/dma-mapping-common.h。这是一个支持多种IOMMU的DMA API的库。很多体系结构(x86, powerpc, sh, alpha, ia64, microblaze and sparc)都使用它。选择一个看看如何正确使用该库。如果你想在单一系统中支持多种类型的IOMMU,基于x86 及 powec的实例可以给你帮助。

参考文献

[1] documentation/DMA-API-HOWTO.txt

热点排行