- 论坛徽章:
- 0
|
大家好,
现在我自己在linux下写了一个块设备,不基于任何接口,其磁盘空间是我在内存中申请了一块大内存(大约4M)。经过试验,是可以正常创建磁盘和格式化的,
但是我想用DMA的方式让这个虚拟磁盘和我的主机内存传输数据,发现失败,主机返回没有DMA传输能力,如下:
ret = dma_set_mask(&g_nvme_dev->dev, DMA_BIT_MASK(24));
printk("the ret1 of dma_set_mask is %d\n",ret);//这里返回-5
ret = dma_set_coherent_mask(&g_nvme_dev->dev, DMA_BIT_MASK(24));
printk("the ret2 of dma_set_mask is %d\n",ret);//这里返回0
按照linux内核提供的上述接口,当这两个函数不返回0的时候,表示设备没有对应的DMA寻址能力。我重新将DMA_BIT_MASK(24)中的参数换成了32/64,
结构都是这样。是不是这样的虚拟块设备,就是没有DMA寻址能力的呢?如果我要实现这个虚拟块设备和内存之间的DMA数据传输,应该如何解决?谢谢 |
|