如何从 Linux 中给定任务的用户空间进程获取页面?
virt_to_page 函数到底返回什么,它返回内核空间中给定地址的页面还是返回用户空间中给定地址的页面?据我所知,它似乎需要一个内核地址并返回该地址的页面。如果是这样,我可以使用什么来从给定任务或 mm_struct 和虚拟地址的用户空间进程获取页面?
What exactly does the virt_to_page function return, does it return the page given an address in the kernel space or does it return a page given an address in user space? As far as I can tell it seems that it takes a kernel address and returns the page for that. If so what can I use to get a page from a user space process given the task or mm_struct and then virtual address?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
virt_to_page() 确实只适用于直接映射的内核地址。要查找用户空间映射的页面,您需要使用
get_user_pages()
(并在完成释放页面上的引用后执行put_page
)。virt_to_page()
does indeed work only for direct-mapped kernel addresses. To find a page for a userspace mapping, you need to useget_user_pages()
(and do aput_page
when you're done to release the reference on the page).