我正在编写一个内核模块,它将分配一些一致的内存并返回相应的虚拟和物理地址。
我将模块注册为cdev
,用dma_alloc_coherent()
分配空间,并想用dma_common_mmap()
对其进行mmap。
dma_common_mmap()
需要指向struct device
的指针:我如何获得它?
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag);
此函数处理缓冲区的分配和映射。前两个参数是设备结构和所需缓冲区的大小。函数在两个位置返回DMA映射的结果。函数的返回值是缓冲区的内核虚拟地址,驱动程序可以使用该地址。同时,相关的总线地址在dma_handle中返回。
看看int cdev_device_add(struct cdev *cdev, struct device *dev)
您可以在上找到一个工作示例linux-source/drivers/gpio/gpiolib.c