簡體   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