首先来看看__user的宏定义:
|
而事实上也确实如此,它是为了编译内核/模块时用 make C=1选项,打开静态语法检查工具sparse,来探测可能出现的错误。同时也可以看出它对文件的生成并没有影响,只是用来检查语法正确性。
进一步研究发现,sparse是一个静态的C语法检查工具,Linux下编译内核或编译module时,可以附加C=1来调用sparse检查代码.
另外,sparse定义了几个内存空间,sparse针对Linux内核定义了几个地址空间, kernel空间为默认, user空间为1, io区间为2. 这样可以检查访问地址的代码是否有问题。包括其中address_space(1)指用户空间。
例如驱动编写中,size_t hello_read(struct file *file, char __user *buff, size_t count, loff_t *offp)
{
return 0;
}
原文:http://blog.csdn.net/haozhao_blog/article/details/20722521