在从事Linux Kernel开发的过程中,user_app和kernel之间传递数据时不能使用memcpy()函数,必须使用copy_to/from_kernel或者是put/get_user。原因是kernel和user_app内存不能直接互访。
1. put_user
Description
This macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays.
ptr must have pointer-to-simple-variable type, and x must be assignable to the result of dereferencing ptr .
Returns zero on success, or -EFAULT on error.
2. get_user
Description
This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays.
ptr must have pointer-to-simple-variable type, and the result of dereferencing ptr must be assignable to x without a cast.
Returns zero on success, or -EFAULT on error. On error, the variable x is set to zero.
1. copy_to_user
Arguments
- to
-
Destination address, in user space.
- from
-
Source address, in kernel space.
- n
-
Number of bytes to copy.
Description
Copy data from kernel space to user space.
Returns number of bytes that could not be copied. On success, this will be zero.