我想将用户空间内存的指针传递给内核模块中的函数。我不想用copy_from_user
。我读过我应该使用get_user_pages
函数。从内核空间访问用户空间 - get_user_pages
例如一页。
struct page **pages;
pages = kmalloc(1 * sizeof(*pages), GFP_KERNEL);
down_read(¤t->mm->mmap_sem);
get_user_pages(current,current->mm,uaddr, 1, 1, 0,pages,NULL);
up_read(¤t->mm->mmap_sem);
uaddr
是用户空间中的地址。
- 这样做后,我可以投入并通过
uaddr
到我的内核模块功能?或者,也许我必须以某种方式使用这些struct pages
? - 为什么我必须使用down/up读取?
- 之后,我必须使用
SetPageDirty()
和page_cache_release()
函数?