ユーザースペースメモリからカーネルモジュールの関数にポインタを渡したいのですが。使いたくない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()機能する必要がありますか?