0

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

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

内核代码太复杂了,我被困在列表头文件

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

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

4

1 回答 1

0

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

LIST_HEAD_INIT是一个初始化 in 宏的成员的struct list_headLIST_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 都用相同的成员初始化。

于 2013-07-30T04:48:57.590 回答