在Linux内核中,但通道使用DMA API从不可用(Using DMA API in linux

2019-10-22 04:25发布

我试图用dmatest.c在英特尔至强服务器和普通笔记本电脑与i7处理器测试DMA。 这是从来没有能够得到一个通道 - 我发现了这一点通过调试dmatest.c本身。 下面854行始终执行(我把我自己的printk那里)。

有什么我应该做的就是这个API执行前的工作(如DMA模块或什么吗?)
或者,我用错API集? 在至强服务器,我做了大量的研究,它可以被加载ioatdma.ko模块。 modprobe的IOATDMA有的可在/ SYS /班/后DMA,如dma0channel0,dma1channel0 .... etc文件

但是,运行dmatest代码,但它仍然不能得到任何通道。

任何帮助或暗示的赞赏。

       836 static void request_channels(struct dmatest_info *info,
       837                              enum dma_transaction_type type)
       838 {
       839         dma_cap_mask_t mask;
       840 
       841         dma_cap_zero(mask);
       842         dma_cap_set(type, mask);
       843         for (;;) {
       844                 struct dmatest_params *params = &info->params;
       845                 struct dma_chan *chan;
       846 
       847                 chan = dma_request_channel(mask, filter, params);
       848                 if (chan) {
       849                         if (dmatest_add_channel(info, chan)) {
       850                                 dma_release_channel(chan);
       851                                 break; /* add_channel failed, punt */
       852                         }
       853                 } else
       854                         break; /* no more channels available */

测试命令,我使用的(以下在内核DOC dmatest.txt文件):

% echo dma0chan0 > /sys/kernel/debug/dmatest/channel
% echo 2000 > /sys/kernel/debug/dmatest/timeout
% echo 1 > /sys/kernel/debug/dmatest/iterations
% echo 1 > /sys/kernel/debug/dmatest/run
文章来源: Using DMA API in linux kernel but channel is never available