如何从cdev

时间:2015-11-19 21:57:11

标签: linux-kernel device-driver dma

我正在编写一个内核模块,它将分配一些连贯的内存并返回相应的虚拟和物理地址。

我正在将模块注册为cdev,使用dma_alloc_coherent()分配空间,我想使用dma_common_mmap()对其进行mmap。

dma_common_mmap()需要指向struct device的指针:我怎么能获得它?

2 个答案:

答案 0 :(得分:0)

void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag);

此函数处理缓冲区的分配和映射。前两个参数是设备结构和所需缓冲区的大小。 该函数在两个地方返回DMA映射的结果。函数的返回值是缓冲区的内核虚拟地址,可供驱动程序使用。 同时,相关的总线地址以dma_handle返回。

答案 1 :(得分:0)

看看 int cdev_device_add(struct cdev *cdev, struct device *dev)

您可以在以下位置找到工作示例 linux-source/drivers/gpio/gpiolib.c