Linux内核源码分析—从用户空间复制数据到内核空间
本文主要参考《深入理解Linux内核》,结合2.6.11.1版的内核代码,分析从用户空间复制数据到内核空间函数。
1、不描述内核同步、错误处理、参数合法性验证相关的内容
2、源码摘自Linux内核2.6.11.1版
3、阅读本文请结合《深入理解Linux内核》第三版相关章节
4、本文会不定时更新
1、copy_from_user
函数功能:
从用户空间向内核空间复制数据
函数源码:
/**
* copy_from_user: - Copy a block of data fromuser space.
* @to: Destination address, in kernel space.
* @from: Source address, in user space.
* @n: Number of bytes to copy.
*
* Context: User context only. This function may sleep.
*
* Copy data from user space to kernel space.
*
* Returns number of bytes that could not becopied.
* On success, this will be zero.
*
* If some data could not be copied, thisfunction will pad the copied
* data to the requested size using zero bytes.
*/
unsigned long
copy_from_user(void *to, const void__user *from, unsigned long n)
{
might_sleep();
BUG_ON((long)n < 0);
if(access_ok(VERIFY_READ, from, n))
n= __copy_from_user(to, from, n);
else
memset(to,0, n);
returnn;
}
static inline unsigned long
__copy_from_user(void *to, const void__user *from, unsigned long n)
{
might_sleep();
return __copy_from_user_inatomic(to, from, n);
}
函数处理流程&#