【发布时间】:2017-09-05 14:49:13
【问题描述】:
我将使用malloc在用户应用程序中分配内存,并将malloc返回的地址通过字符驱动接口发送给内核模块。
我将在内核模块中使用get_user_pages_fast 固定该内存的页面。
我可以使用virt_to_phys 来获取malloc 返回的地址吗?
它有效吗?如果没有,那么我怎样才能获得正确的物理地址?
我的目标是获取用户空间分配内存的物理地址。 我将传输大小限制为页面大小 (4KB)。
【问题讨论】:
-
您需要实际的物理地址还是 DMA 地址?您可以在固定页面上使用
dma_map_page(),或者如果您从固定页面创建了分散-聚集列表,则可以使用dma_map_sg()。如果您希望 CPU 访问该页面,您可以使用kmap_atomic()来获取该页面的内核虚拟地址。请注意,使用kmap_atomic()映射的页面需要以与映射顺序完全相反的顺序取消映射。
标签: memory memory-management linux-kernel malloc linux-device-driver