我想在启动时将“mem”参数传递给Linux的同时使用保留的连续内存。为DMA使用保留内存
现在,我有我早先保留的这个空间的物理地址,以及它的长度,我希望在我的驱动程序中使用这个保留空间用于DMA目的。
通常我会使用dma_alloc_coherent()
,如果我使用CMA,我也会使用它,但在这种情况下,它与众不同。
现在,我已经阅读了映射的物理空间到内核虚拟空间的可接受的方法是使用ioremap
而且,的“接管”一个连续的空间用于DMA的目的是使用dma_map_single
一种可接受的方式(映射它的总线地址)
我无法结合这两者。 ioremap
工作并返回一个虚拟地址。现在,我已经读过,这不是普通的虚拟地址,我应该只使用访问方法从这个内存中读/写。
事情是,当我试图通过这个虚拟地址dma_map_single
,它不报告错误,但我怀疑这是错误的。
我在做对吧?我能做些什么来使它像它应该那样工作?
10X
我太懒了搜索,但在这个网站上,这个问题每年发生一次。 – 0andriy
谢谢。也许我不擅长搜索,但我搜索并找到了不同的变体,但没有像我的情况。 –