linux的宏__user简介

首先来看看__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.cnhttp://www.bianceng.cn/OS/Linux/

时间: 2024-12-29 22:36:39

linux的宏__user简介的相关文章

Linux集群文件系统简介和集群应用的新挑战

Linux集群文件系统简介 集群文件系统在多个方面完善了 Oracle RAC 的数据库集群功能.以下是它们的对比情况.   通常,集群只是一组作为单一系统运行的服务器(PC 或者工作站).但是,这个定义的外延不断显着扩大:集群技术现在不但是一个动态领域,而且其各种应用程序正不断吸收新的特性.此外,集群文件系统技术(无论是开放源代码的还是专有的)在其功能方面正在迅速趋同. 很多人谈到集群应用程序和其中所使用的文件系统软件时,就象它们完全是一回事似的.更准确地说,大多数集群包含两个主要组件:通过快

Linux Mrtg系统监控简介

一.mrgt配置案例说明,这里以监控网卡为例 #通过public监控localhost上的192.168.1.68地址流量 Target[eth1_lan]:/192.168.1.68:public@localhost #图片右对齐方式 Options[eth1_lan]:growright #生成图片存放目录 Directory[eth1_lan]:eth1 #网卡最大流量 MaxBytes[eth1_lan]:100000000 #图片Y轴单位数 Kmg[eth1_lan]:K,M,G #Y

剖析 Linux hypervisor--KVM 和 Lguest 简介

慢慢弄清楚..   M. Tim Jones, 顾问工程师, Emulex Corp. M. Tim Jones 是一名嵌入式软件工程师,他是 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(现在已经是第 2 版).AI Application Programming(第 2 版)和 BSD Sockets Programming from a Multilanguage Perspec

Unix/Linux中/usr目录简介

在Linux系统中,有一个很重要的目录--/usr目录.关于这个目 录名称的由来,网上主要有下面几种说法: user的缩写 User Shareable Read-only的缩写 Unix/User System Resources的缩写 Unix/User Software Resources的缩写 目前大多数版本的Linux中/usr目录主要放置的是可执行文件和先关库文件, 因此user好像不太可能. 查阅了相关的资料,关于/usr目录起源的说法如下: /usr usually contai

Linux处理器负载均值简介

你可能对于 Linux 的负载均值(load averages)已有了充分的了解.负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子: load average: 0.09, 0.05, 0.01 很多人会这样理解负载均值:三个数分别代表不同时间段的系统平均负载(一分钟.五 分钟.以及十五分钟),它们的数字当然是越小越好.数字越高,说明服务器的负载越 大,这也可能是服务器出现某种问题的信号. 而事实不完全如此,是什么因素构成了负载均值的大小,以及如何区分它们目前的状

Linux的yum安装简介

Yum 是yellowdog updater modified的缩写.yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个 distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级.安装.删除等等操作,减少了 Linux 用户一直头痛的 dependencies 的问题. 一般这类软件通过一个或者多个配置文件描述对应的 repository 的网络地址,通过 http 或者 ftp 协议在需要的时候从 repository 获得必要的信息,下载

Linux系统故障排除过程简介

不管是运行于服务器上的linux还是普通用户的linux系统都有可能发生故障,重装系统又太麻烦,那么我们就要来对系统做故障排除,让系统重新正常运行起来. 不过在这之前呢,我们要先对系统的启动过程有一个初步的了解,以便于我们来更好地维护系统. 一.启动过程: 1.上电自检,检查blos设置,查看硬件是否有问题,若有问题,则不会进行下一步. 2.自检完成后,来由引导程序grub引导系统启动.共分为两个阶段,第一个阶段是MBR中boot loader的引导:第二个阶段主要是grub的配置.这里需要注意

Linux磁盘IO监测简介

DB运行产生太多的磁盘IO的话,性能肯定会受到影响.可以借助zabbix这样的工具进行磁 盘IO的监测,或 者自己动手都可以. 我们可以从proc/diskstats中直接获取信息: 7 3 loop3 0 0 0 0 0 0 0 0 0 0 0 7 4 loop4 0 0 0 0 0 0 0 0 0 0 0 7 5 loop5 0 0 0 0 0 0 0 0 0 0 0 7 6 loop6 0 0 0 0 0 0 0 0 0 0 0 7 7 loop7 0 0 0 0 0 0 0 0 0 0

Linux中的popen-pclose简介

popen Linux C 进程I/O函数,与pclose函数一起使用. 表头文件 #include <stdio.h> 函数定义 FILE * popen ( const char * command , const char * type ); int pclose ( FILE * stream ); 函数说明 popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程.这个进程必须由 pclose() 函数关闭,而不是 fclo