小编rav*_*avi的帖子

关于dma_alloc_coherent的一些问题

  1. 此调用返回的DMA地址是否与物理地址相同?LDD3表示驱动程序应将DMA地址视为不透明.我想mmap这个DMA缓冲区,以便用户空间可以直接读/写它.问题是我应该为remap_pfn_range指定PFN(现在令我惊喜的是(内核3.4+)适用于传统内存,与I/O内存相同).我可以将DMA地址转换为无符号长并将其转换为PFN吗?这不违反LDD3关于不透明性的说法吗?

  2. 是否dma_alloc_coherent总是使用__get_free_pages内部?这是否意味着该区域可能总是过度分配(因为第一个函数占用字节而第二个函数以页为单位分配)?

  3. 有没有办法为从调用中获得的多个连续页面设置单个流映射__get_free_pagesdma_map_page仅适用于单个页面.

linux-device-driver linux-kernel dma

17
推荐指数
1
解决办法
1万
查看次数

如何将Linux内核缓冲区映射到用户空间?

假设缓冲区是使用基于页面的方案分配的.实现mmap的一种方法是使用remap_pfn_range,但LDD3表示这对常规内存不起作用.看来我们可以通过使用SetPageReserved标记保留的页面来解决这个问题,以便它被锁定在内存中.但是并非所有内核内存都已经不可交换,即已经保留了吗?为什么需要明确设置保留位?

这是否与从HIGH_MEM分配的页面有关?

linux linux-device-driver linux-kernel

16
推荐指数
2
解决办法
2万
查看次数

标签 统计

linux-device-driver ×2

linux-kernel ×2

dma ×1

linux ×1