ユーザースペースメモリからカーネルモジュールの関数にポインタを渡したいのですが。使いたくないcopy_from_user
。get_user_pages
関数を使うべきだと読みました。
たとえば、1ページ。
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
を何らかの方法で使用する必要がありますか?- なぜダウン/アップリードを使用する必要があるのですか?
- すべての後、私は使用
SetPageDirty()
してpage_cache_release()
機能する必要がありますか?