# define __user __attribute__((noderef, address_space(1)))


パラメータtoのときにある_user限定、これは~/include/linux/compiler.hには以下の定義がある.
# define __user     __attribute__((noderef, address_space(1)))
これがユーザ空間であることを示すアドレス、すなわちユーザ空間であるメモリを指す
皆さんはこれに対してattribute__ 迷っていますが、大丈夫です.googleちょっと.
__attribute__ gnu cコンパイラの機能で、開発者にこの機能を使用して宣言された関数または変数に属性を付加させ、コンパイラがエラーチェックを行うのを容易にするために使用されます.実はカーネルチェックです.
具体的には以下のように参照してください.
http://unixwiz.net/techtips/gnu-c-attributes.html
 
 
  __userマクロは、コンパイラに(noderefを介して)このポインタの参照を解除すべきではないことを簡単に示す(現在のアドレス空間では意味がないため).意味がわからない?一部のネットユーザーはユーザー空間のためだと言っていますが、私は自分で使っています.ユーザー空間ではありません.問題はありません.
 
 
ユーザースペースで、カーネルスペースでコピーする場合はcopy_を使用できます.from_userユーザー空間がint i=0と書かれている場合.ioctl(fd, XXXXX, i); カーネルスペースはgetと書く必要がありますuser(xxx, (int __user *)arg); ユーザ空間がint i=0と書かれている場合.ioctl(fd, XXXXX, &i); カーネルスペースには、copy_と書く必要があります.from_user(xxx, (void __user *)arg, size);