替代将物理内存映射到用户虚拟地址空间而不使用“mmap”调用

时间:2014-01-06 06:30:33

标签: c linux memory linux-kernel linux-device-driver

在Linux中,我们知道我们可以使用用户空间应用程序中的mmap调用将物理内存映射到用户虚拟地址空间,并在我们的设备驱动程序中实现mmap函数指针(使用remap_pfn_range)。但是没有任何其他方法可以在没有mmap调用的情况下将物理内存映射到用户虚拟地址空间。可能是我们可以使用malloc调用并通过用户虚拟起始地址进行“IOCTL”调用,然后使用kmalloc和remap_pfn_range进行映射。

我试过一次但失败了。这是正确的方式还是其他任何方式。

-Sumeet

1 个答案:

答案 0 :(得分:0)

操作系统会自动将物理内存映射到虚拟地址空间,而不进行任何mmap调用。它被称为内存管理或memory paging。这意味着您的流程需要任何新的内存,例如通过malloc,或者在堆栈段中,进程要求新页面,OS会自动创建从虚拟内存到物理内存的映射。但是,你不需要知道所有这些 - 操作系统将隐藏你的一切。只是在虚拟地址空间中感到高兴,这就足够了: - )

另一方面,

mmap是将文件映射到虚拟内存。这是映射的特例。您还可以使用IPC共享内存(shmget)在进程之间共享内存。您也可以使用mmap执行此操作,而无需实际写入文件。

取决于你想做什么。