繁体   English   中英

Linux dma设备驱动程序dma_request_channel失败

[英]Linux dma device driver dma_request_channel fails

我正在尝试编写一个与嵌入式系统上的DMA接口的平台驱动程序。 我们正在使用Zedboard和Xilinx的AXI DMA IP。 但是,我相信我们的错误与Linux内核有关。

为了获得DMA的tx/rx通道,Linux提供了dma_request_channel函数。 此函数使用需要与DMA匹配的过滤器和过滤器参数。 此函数获取系统中所有可用DMA的列表,并使用过滤器将其与所需的匹配。 但是,这似乎无法获得所有可用的DMA,而只能获得一个。 ARM内核带有自己的PL330硬IP DMA 那是它看到的唯一一个。

内核代码太难理解了,以至于我被卡在列表头文件中

有人可以解释LIST_HEAD_INIT做什么吗? 那是什么C语法?

我是否需要使硬件外围设备对操作系统可见? 我以为设备树可以解决这个问题,我们已经将其包含在设备树中。 我们还可以通过使用get_platform_resources API获取其基址。

Could someone explain what LIST_HEAD_INIT does? What C syntax is that?

LIST_HEAD_INIT是一个宏,用于初始化LIST_HEAD宏中struct list_head的成员。

#define LIST_HEAD_INIT(name) { &(name), &(name) }

#define LIST_HEAD(name) \
          struct list_head name = LIST_HEAD_INIT(name) 

//Taken from scripts/kconfig/list.h    
struct list_head {
          struct list_head *next, *prev;
  };

在这里,prev和next都使用相同的成员初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM