我尝试使用来自自定义内核驱动程序的 DMAengine API 来执行分散-聚集操作。我有一个连续的存储区域作为源极和我想要通过在几个分布式缓冲器以复制其数据散布表结构。DMA 控制器是支持 DMAengine API 的PL330 控制器(请参阅PL330 DMA 控制器)。
我的测试代码如下:
在我的驱动程序头文件 ( test_driver.h) 中:
#ifndef __TEST_DRIVER_H__
#define __TEST_DRIVER_H__
#include <linux/platform_device.h>
#include <linux/device.h>
#include <linux/scatterlist.h>
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
#include <linux/of_dma.h>
#define SG_ENTRIES 3
#define BUF_SIZE 16
#define DEV_BUF 0x10000000
struct dma_block {
void * data;
int size;
};
struct dma_private_info {
struct sg_table sgt;
struct dma_block * blocks;
int nblocks;
int dma_started;
struct dma_chan * dma_chan;
struct dma_slave_config dma_config; …Run Code Online (Sandbox Code Playgroud)