Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100477
  • 博文数量: 54
  • 博客积分: 1920
  • 博客等级: 上尉
  • 技术积分: 480
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-08 13:46
文章分类

全部博文(54)

文章存档

2011年(1)

2010年(8)

2009年(45)

我的朋友

分类: LINUX

2009-05-11 14:08:30

关于/usr/src/linux/include/linux中的头文件的疑问 新  

在我的red hat 9.0(linux-2.4.20-8)系统中,目录/usr/src/linux/include/linux和目录usr/include/linux中都有许多头文件,并且头文件名都相同,但是对于文件里面的内容,有的头文件相同,有的却不一样。
我想请问一下,这两个目录下的头文件有什么关联吗?它们分别有什么用法的不同!

文章选项: 打印


(veteran)
05-05-23 14:54
Re: 关于/usr/src/linux/include/linux中的头文件的疑问 新 []  

/usr/src/linux/include/linux是给编译内核用的
/usr/include/linux是给编译应用程序用的

如果你的/usr/src/linux/里的内核源码,与当前运行的内核一致
可以
ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
以前的Linux一般也都是这样的。

但是在最新的发布中,似乎更推荐两者分开。

文章选项: 打印


(stranger)
05-05-24 09:36
Re: 关于/usr/src/linux/include/linux中的头文件的疑问 新 []  

如果说/usr/src/linux/include/linux是给编译内核用的; 而/usr/include/linux是给编译应用程序用的 ,那是不是也可以说,我在基于内核进行编程(模块编程)时,在编译程序时,是不是用/usr/src/linux/include/linux的头文件,如:gcc -O -c -I/usr/src/linux/include examplemod.c ;但是基于用户空间编程(比如libipq)时,在编译程序是不是用/usr/include/linux的头文件,如:gcc -O -c -I/usr/include examplespace.c ;




文章选项: 打印


(veteran)
05-05-24 09:49
Re: 关于/usr/src/linux/include/linux中的头文件的疑问 新 []  

究竟该用哪个,是看你要编译的东西,是否依赖内核版本。
如果不依赖,用哪个都无所谓。

否则,就要看你编译的东西,希望它运行于何种内核:是当前运行的内核,还是源码目录(一般是/usr/src/linux)中的内核
然后,根据情况选择该使用何种头文件。

即使你是在编译Kernel 模块,如果希望它运行于当前运行的Kernel,那还是应该使用/usr/include/linux;
否则,如果你希望你编译的Kernel 模块与源码目录中编译出来的Kernel一起发布,就应该使用 /usr/src/linux/include/linux。

----以上是我的理解,仅供参考,如果有说的不准确的地方,欢迎讨论。

文章选项: 打印


(stranger)
05-05-24 10:09
Re: 关于/usr/src/linux/include/linux中的头文件的疑问 新 []  

如果说/usr/src/linux/include/linux是给编译内核用的; 而/usr/include/linux是给编译应用程序用的 ,那是不是也可以说,我在基于内核进行编程(模块编程)时,在编译程序时,是不是用/usr/src/linux/include/linux的头文件,如:gcc -O -c -I/usr/src/linux/include examplemod.c ;但是基于用户空间编程(比如libipq)时,在编译程序是不是用/usr/include/linux的头文件,如:gcc -O -c -I/usr/include examplespace.c ;

我在redhat9.0(linux-2.4.20-8)环境下编译了一个和netfilter相关的内核程序程序,当我用gcc -O -c -I/usr/src/linux/include examplemod.c编译时,就没有问题,但我用gcc -O -c -I/usr/include examplemod.c编译时就不能通过,出现如下的错物欲告警:
/usr/include/linux/netfilter_ipv4.h:53: `INT_MIN' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:53: enumerator value for `NF_IP_PRI_FIRST' not integer constant
/usr/include/linux/netfilter_ipv4.h:59: `INT_MAX' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:59: enumerator value for `NF_IP_PRI_LAST' not integer constant
test1.c:21: warning: `struct net_device' declared inside parameter list
test1.c:21: warning: its scope is only this definition or declaration, which is probably not what you want
test1.c:21: warning: `struct sk_buff' declared inside parameter list
test1.c: In function `init_module':
test1.c:37: invalid use of undefined type `struct nf_hook_ops'
test1.c:38: invalid use of undefined type `struct nf_hook_ops'
test1.c:39: invalid use of undefined type `struct nf_hook_ops'
test1.c:40: invalid use of undefined type `struct nf_hook_ops'
/usr/include/linux/byteorder/swab.h: At top level:
test1.c:14: storage size of `nfho' isn't known

文章选项: 打印


(stranger)
05-05-24 10:09
Re: 关于/usr/src/linux/include/linux中的头文件的疑问 []  


我在redhat9.0(linux-2.4.20-8)环境下编译了一个和netfilter相关的内核程序,当我用gcc -O -c -I/usr/src/linux/include examplemod.c编译时,就没有问题,但我用gcc -O -c -I/usr/include examplemod.c编译时就不能通过,出现如下的错误告警:
/usr/include/linux/netfilter_ipv4.h:53: `INT_MIN' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:53: enumerator value for `NF_IP_PRI_FIRST' not integer constant
/usr/include/linux/netfilter_ipv4.h:59: `INT_MAX' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:59: enumerator value for `NF_IP_PRI_LAST' not integer constant
test1.c:21: warning: `struct net_device' declared inside parameter list
test1.c:21: warning: its scope is only this definition or declaration, which is probably not what you want
test1.c:21: warning: `struct sk_buff' declared inside parameter list
test1.c: In function `init_module':
test1.c:37: invalid use of undefined type `struct nf_hook_ops'
test1.c:38: invalid use of undefined type `struct nf_hook_ops'
test1.c:39: invalid use of undefined type `struct nf_hook_ops'
test1.c:40: invalid use of undefined type `struct nf_hook_ops'
/usr/include/linux/byteorder/swab.h: At top level:
test1.c:14: storage size of `nfho' isn't known

文章选项: 打印


(veteran)
05-05-24 10:37
Re: 关于/usr/src/linux/include/linux中的头文件的疑问 新 []  

是否是你的/usr/include/linux目录下面的头文件有错误?
这些文件都是在glibc-kernelheaders-x.x.x.rpm里面安装的
你可以检查它是否完整。
rpm -V glibc-kernelheaders

我使用的是2.6.9的Kernel
INT_MIN和INT_MAX定义在/usr/include/linux/kernel.h


#define INT_MAX ((int)(~0U>>1))
#define INT_MIN (-INT_MAX - 1)
#define UINT_MAX (~0U)
#define LONG_MAX ((long)(~0UL>>1))
#define LONG_MIN (-LONG_MAX - 1)
#define ULONG_MAX (~0UL)


类型struct nf_hook_ops声明在/usr/include/linux/netfilter.h

struct nf_hook_ops
{
struct list_head list;

/* User fills in from here down. */
nf_hookfn *hook;
struct module *owner;
int pf;
int hooknum;
/* Hooks are ordered in ascending priority. */
int priority;
};


文章选项: 打印


(addict)
05-05-24 13:55
Re: 关于/usr/src/linux/include/linux中的头文件的疑问 新 []  

redhat的/usr/include属于glibc,不是给内核用的,虽然也包含asm和linux目录,但是简化过的,编译内核模块偶尔能成功,幸运而已,我建议编译内核时加-nostdinc参数,以防止使用了错误的目录。

文章选项: 打印

阅读(1550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~