DMABUF, DMA mapping,IOMMU的区别

来源:互联网 发布:js页面加载完成后执行 编辑:程序博客网 时间:2024/06/09 19:11
1. DMABUF can be used as a wrapper to encapsulate other memory management frameworks. All these memory management framework(I mean mostly for graphics), buffer is the keypoint. DMABUF defines a standard buffer structure. So DMABUF can be used as a wrapper for  TTM/GEM/Android ION... and etc. Notice DMABUF can't replace these things, cause it doesn't cover everything. E.g: DMABUF has no   user space interfaces, right now only kernel interfaces(can be used in device driver).(DMABUF定义了一个标准的buffer结构,因此可用于封装其它的内存管理框架(ION),但不能够代替这些框架,因为DMABUF没有用户空间的接口,仅有内核接口)2. Kernel has DMA mapping API from origin. ARM defines IOMMU which can be used to connect scattered physical memory as a continuous region for devices which needs continue address towork(e.g: DMA). So IOMMU implementations & CMA should work behind kernel DMA mapping API. E.g: dma_alloc_from_contiguous can be implemented by CMA;dma_alloc_coherent can be implemented by IOMMU or by the normal case(just call__get_free_pages). So for device drivers need dma buffers, we should use dmamapping APIs, not call iommu api directly.(device drivers先使用dma mapping APIs(它调用IOMMU机制的函数))3. For tegra, GART & SMMU can be used to implement IOMMU apis.