linux DMA接口知识点详解

  

<强> 1。两种DMA映射类型
  

  

1.1。一致性DMA映射(一致的DMA映射)
  

  

主要用于映射长时间使用的区域。

  

CPU和DMA控制器不需要考虑缓存的影响。

  

这里的一致实际上是连贯的概念,不能保证一致,也就是说需要记忆障碍来保证记忆。

  

1.2流式DMA映射(流DMA映射)
  

  

主要用于一次性DMA传输,传输完成后就会释放。

  

2。指定DMA设备的寻址范围
  

  

包括/linux/dma-mapping.h

     //用于一致性内存映射的映射范围   静态内联int dma_set_coherent_mask (struct设备* dev u64面具)//用于流式内存映射的映射范围   静态内联int dma_set_mask (struct设备* dev, u64面具);      

<强> 3。DMA映射接口
  

  

3.1一致性DMA接口
  

  

分配较大DMA缓冲器

     //dev DMA控制器设备//大小要分配的DMA缓冲器大?/dma_handle返回DMA缓冲区的物理地址//标志分配标志//返回值DMA缓冲器的虚拟地址   void * dma_alloc_coherent (struct设备* dev size_t大小,dma_addr_t * dma_handle gfp_t标志)//dev DMA控制器设备//大小释放的DMA缓冲器大?/cpu_addr DMA缓冲区的虚拟地址//dma_handle DMA缓冲区的物理地址   空白dma_free_coherent (struct设备* dev size_t大小,   void * cpu_addr, dma_addr_t dma_handle)      

分配较小DMA缓冲区,从DMA调查中申请。

     /* *   * dma_pool_alloc -从dma调查获得一块一致性内存   * @pool:产生内存块的dma池   * @mem_flags: GFP_ *位掩码   * @handle:返回内存块的dma地址   */void * dma_pool_alloc (struct dma_pool *池,gfp_t mem_flags,   dma_addr_t *处理)/* *   * dma_pool_free -将内存释放回dma池   * @pool:产生内存块的dma池   * @vaddr:内存块的虚拟地址   * @dma:内存块的物理地址   */空白dma_pool_free (struct dma_pool *池,void * vaddr, dma_addr_t dma)      

, <强> 3.2流式DMA接口

     //dev需要映射内存的设备//ptr映射的缓冲虚拟地址//大小映射的大?/dir传输方向//attr属性//返回值直接存储器存取物理地址   dma_addr_t dma_map_single_attrs (struct设备* dev, void * ptr,   size_t大小,   enum dma_data_direction dir,   无符号长attrs)//dev需要映射内存的设备//addr dma区域的物理地址//大小映射的大?/dir传输方向//attr属性   空白dma_unmap_single_attrs (struct设备* dev dma_addr_t addr,   size_t大小,   enum dma_data_direction dir,   无符号长attrs)      

<强>页面映射

        dma_addr_t dma_map_page (struct设备* dev结构页面*,   size_t抵消,size_t大小,   enum dma_data_direction dir)      空白dma_unmap_page (struct设备* dev dma_addr_t addr,   size_t大小,enum dma_data_direction dir)      

<强>返回dma映射错误

     //返回dma映射错误   int dma_mapping_error (struct设备* dev dma_addr_t dma_addr)      

<强>映射scatterlist

        int dma_map_sg_attrs (struct设备* dev, struct scatterlist * sg,   enum dma_data_direction dir, int、   无符号长attrs)      空白dma_unmap_sg_attrs (struct设备* dev, struct scatterlist * sg,   enum dma_data_direction dir, int、   无符号长attrs)//返回映射后的dma地址和长度   sg_dma_address (struct scatterlist * sg)   sg_dma_len (struct scatterlist * sg)      

<强>同步操作

        空白dma_sync_single_for_cpu (struct设备* dev dma_addr_t addr,   size_t大小,   enum dma_data_direction dir)      空白dma_sync_single_for_device (struct设备* dev,   dma_addr_t addr, size_t大小,   enum dma_data_direction dir)      无效   dma_sync_sg_for_cpu (struct设备* dev, struct scatterlist * sg,   int nelems enum dma_data_direction dir)      无效   dma_sync_sg_for_device (struct设备* dev, struct scatterlist * sg,   int nelems enum dma_data_direction dir)      

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

linux DMA接口知识点详解