易截截图软件、单文件、免安装、纯绿色、仅160KB

linux内核的一些预定义

 原文:http://article.phpfans.net/?do=Show&id=Mjc3NTkx
 作者: crazytyt  时间: 2009-08-27 13:29:00
所有的内核代码,基本都包含了linux\compile.h这个文件,所以它是基础,打算先分析这个文件里的代码看看,有空再分析分析其它的代码。
首先印入眼帘的是对__ASSEMBLY__这个宏的判断,这个变量实际是在编译汇编代码的时候,由编译器使用-D这样的参数加进去 的,AFLAGS这个变量也定义了这个变量,gcc会把这个宏定义为1。用在这里,是因为汇编代码里,不会用到类似于__user这样的属性(关于 __user这样的属性是怎么回子事,本文后面会提到),因为这样的属性是在定义函数的时候加的,这样避免不必要的在编译汇编代码时候的引用。
接下来是一个对__CHECKER__这个宏的判断,这里需要讲的东西比较多。
当 编译内核代码的时候,使用make C=1或C=2的时候,会调用一个叫Sparse的工具,这个工具对内核代码进行检查,怎么检查呢,就是靠对那些声明过Sparse这个工具所能识别的特 性的内核函数或是变量进行检查。在调用Sparse这个工具的同时,在Sparse代码里,会加上#define __CHECKER__ 1的字样。换句话说,就是,如果使用Sparse对代码进行检查,那么内核代码就会定义__CHECKER__宏,否则就不定义。
所以这里就能看出来,类似于__attribute__((noderef, address_space(1)))这样的属性就是Sparse这个工具所能识别的了。
那么这些个属性是干什么用的呢,我一个个做介绍。
这 样的属性说明,有一部分在gcc的文档里还没有加进去,至少我在gcc 4.3.2的特性里没有看到,网上有哥们问类似的问题,Greg对他进行了解答,然后他对Greg抱怨文档的事,Greg对他说,他有时间抱怨的话,还不 如自己来更新文档。他不能对一个免费工具的文档有如此之高的要求,除非他付费。
# define __user  __attribute__((noderef, address_space(1)))
__user这个特性,即__attribute__((noderef, address_space(1))),是用来修饰一个变量的,这个变量必须是非解除参考(no dereference)的,即这个变量地址必须是有效的,而且变量所在的地址空间必须是1,即用户程序空间的。
这里把程序空间分成了3个部分,0表示normal space,即普通地址空间,对内核代码来说,当然就是内核空间地址了。1表示用户地址空间,这个不用多讲,还有一个2,表示是设备地址映射空间,例如硬件设备的寄存器在内核里所映射的地址空间。
所以在内核函数里,有一个copy_to_u


相关文档:

实战Linux Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

linux搭建LAMP

RedHat(CentOS5.3)平台下LAMP搭建Linux+Apache+Mysql+PHP
一、安装环境:
系统平台:CentOS5.3,内核2.6.18-128.el5,文字界面(未安装图形界面)
二、软件需求及下地地址:
httpd-2.2.13.tar.gz
MySQL-client-community-5.1.40-0.rhel5.i386.rpm MySQL-server-community-5.1.40-0.rhel5.i386.rpm     ......

s3c2440基于linux的gpio led字符设备驱动实践

 今天完成了嵌入式linux的第一个驱动的编写和测试,虽然是个简单的程序,但是麻雀虽小,五脏俱全,希望可以给刚开始接触驱动编写的人一些提示,共同进步。
源代码:
分析如下:
      下面是我的驱动程序:
#include <linux/config.h>//配置头文件
#include <linux/kernel.h&g ......

使用linux rpm 查询软件里面的相关性

如何查询rpm里的相关的信息 1. 查询已经安装在linux中的软件需要注意的几个参数:
1. 查询已经安装在linux中的软件
需要注意的几个参数:
rpm –qa   //查询linux系统上已经安装了那些软件 ,此时的查询最好使用
rpm –qa |more
rpm –qf filename //检查这个文件是在那个软件中安装的
[ro ......

Linux SVN的安装使用


Linux SVN的安装使用
The goal of the Subversion project is to build a version control system that is a compelling replacement for CVS in the open source community. The software is released under an Apache/BSD-style open source license.
SVN是一个版本控制软件,类似CVS,但是SVN的的有点是开源的,而且 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号