我想將用戶空間內存的指針傳遞給內核模塊中的函數。我不想用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()
函數?