【发布时间】:2021-11-12 07:23:35
【问题描述】:
根据以下文档 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()。
为什么 RAM 区域需要额外的步骤 set_memory_uc() 或 set_memory_wc()?
【问题讨论】:
标签: linux-kernel kernel driver mmap