【问题标题】:How to get device from cdev如何从 cdev 获取设备
【发布时间】:2016-02-22 06:10:13
【问题描述】:

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

我将模块注册为cdev,使用dma_alloc_coherent() 分配空间,我想使用dma_common_mmap() 映射它。

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

【问题讨论】:

    标签: linux-kernel device-driver dma


    【解决方案1】:
    void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag);
    

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

    【讨论】:

    • 你有没有设法让 dma_alloc_coherent 和 mmap 工作。我不能做到这一点。我必须编写自己的读/写函数。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多