将写组合区域映射到用户空间文档



根据以下文档https://www.kernel.org/doc/html/latest/x86/pat.html

驱动程序想要导出一些页面到用户空间可以使用mmap接口和以下组合:

pgprot_noncached ()

io_remap_pfn_range()或remap_pfn_range()或vmf_insert_pfn()

请注意,这组api仅适用于IO(非RAM)区域。如果驱动程序想要导出RAM区域,它必须像上面的第0步一样执行set_memory_uc()或set_memory_wc(),并且还要跟踪这些页面的使用情况,并在页面被释放到释放池之前使用set_memory_wb()。

为什么额外的步骤set_memory_uc()或set_memory_wc()需要RAM区域?

这是必需的,因为set_memory_uc()和set_memory_wc()是专门为处理内存区域而编写的;你被告知在这里使用的其他API函数是用于I/O区域的。

因为你想使用所列出的API函数来处理RAM区域中的页面,你的驱动程序需要首先将它们标记为未缓存或写入组合,以便它们基本上可以像I/O页面一样被处理,使用API,然后确保在驱动程序认为自己"完成"之前对内存页面进行显式回写,以便同步它们的内容;和他们在一起。

最新更新