[英]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.