内核如何通过虚拟地址到达虚拟内存

我正在写一个设备驱动程序。 用户进程通过mmap获取虚拟地址,并通过remap_pfn_range与物理地址映射。 现在我需要在内核的vm_operations_struct中实现.access函数来获取用户线程传递的虚拟地址的映射内存,这是我遇到的问题。
int vm_access(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write)我需要复制addr中的数据,这是由mmap分配的虚拟地址并映射到物理地址, BUF。 我试过copy_from_user,它失败了; 当我尝试memcpy_fromio时,操作系统在调用时会崩溃。尝试了几种方法,只是不起作用。

有没有办法这样做,或者它不实际? 提前致谢!

更新:
现在的问题是让物理内存已经映射到内核设备驱动程序中的用户空间。 我使用ioremap和memcpy_fromio来获取数据,但是系统崩溃。但是由于地址可以通过mmap和remap_pfn_range在用户模式进程中成功达到,所以我无法在内核中读取它。

链接地址: http://www.djcxy.com/p/70325.html

上一篇: How can kernel reach the mmaped memory by the virtual address

下一篇: Memory write with kernel module causes kernel oops in Android kernel