加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux的宏__user简介

发布时间:2016-10-22 05:42:26 所属栏目:Linux 来源:网络整理
导读:首先来看看__user的宏定义: #ifdef __CHECKER__# define __user __attribute__((noderef, address_space(1))) 从宏定义可以看出,在配置__CHECKER__宏的条件下

首先来看看__user的宏定义:

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

从宏定义可以看出,在配置__CHECKER__宏的条件下,__user宏定义有效,而显然可以看出宏__CHECKER__是作为检查机制出现的,所以我们可以推断宏__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://www.bianceng.cn/OS/Linux/

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读