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