rav*_*avi 17 linux-device-driver linux-kernel dma
此调用返回的DMA地址是否与物理地址相同?LDD3表示驱动程序应将DMA地址视为不透明.我想mmap这个DMA缓冲区,以便用户空间可以直接读/写它.问题是我应该为remap_pfn_range指定PFN(现在令我惊喜的是(内核3.4+)适用于传统内存,与I/O内存相同).我可以将DMA地址转换为无符号长并将其转换为PFN吗?这不违反LDD3关于不透明性的说法吗?
是否dma_alloc_coherent总是使用__get_free_pages内部?这是否意味着该区域可能总是过度分配(因为第一个函数占用字节而第二个函数以页为单位分配)?
有没有办法为从调用中获得的多个连续页面设置单个流映射__get_free_pages?dma_map_page仅适用于单个页面.
jle*_*ahy 12
不,返回的地址是虚拟地址,否则您将无法从内核空间访问它.它是代表物理地址的dma_handle,但它是不透明的.您需要在它返回的地址上使用virt_to_phys,然后将其传递给remap_pfn_range.
我不相信它(虽然它可能是平台依赖的),但它确实分配页面.如果你想为DMA使用较少的内存,你应该使用dma_pool_create,然后从那里分配区域.
您可以使用dma_map_single而不是dma_map_page.
我建议咨询DMA-API.txt以获取有关这些内容的更多详细信息.
| 归档时间: |
|
| 查看次数: |
13753 次 |
| 最近记录: |