2013-06-28 54 views
3

另见这个答案:https://stackoverflow.com/a/10770582/1284631MMAP只需要内核缓冲区的页到用户空间

我需要类似的东西,但不必分配缓冲区:缓冲区是大,在理论上,但只有用户空间程序需要访问它的一些部分,所以有限的几页。

的问题是:

会是什么my_vm_ops.fault()方法的主体,并通过vmf->page返回哪一页? (它需要分配所需的页面,但不能从预先存在的缓冲区中分配)

+0

如果您不分配缓冲区,它从哪里来? –

+0

@CL。那么,这个想法就是分配所要求的页面。你是否建议对每一个页面错误我应该创建一个缓冲区,只有一个PAGE_SIZE的vmalloc_user(),然后将该页面返回到vmf-> page字段?基本上,my_fault()函数应该是这样的:{void * my_buf = vmalloc_user(PAGE_SIZE); vmf->页= vmalloc_to_page(my_buf); get_page(vmf-> page);}?然后用vmf-> pgoff做什么?它还有什么意义? PS谢谢。 – user1284631

+0

@CL。我认为这是答案,的确如此:static int my_fault(struct vm_area_struct * vma,struct vm_fault * vmf){void * my_buf = vmalloc_user(PAGE_SIZE); vmf->页= vmalloc_to_page(my_buf); vmf->页= get_page(vmf->页);}。你能证实这一点吗? return 0; } – user1284631

回答

0

想要执行的操作已可通过拨打mmapMAP_ANONYMOUS来完成。

或者,拨打/dev/zero致电mmap

+0

谢谢,但我无法修改用户空间程序。 – user1284631

+0

但是你可以创建一个到'/ dev/zero'的符号链接吗? –

+0

我的确可以创建一个符号链接到/ dev/zero。我应该如何继续? – user1284631