Chinaunix首页 | 论坛 | 博客
  • 博客访问: 607077
  • 博文数量: 353
  • 博客积分: 1104
  • 博客等级: 少尉
  • 技术积分: 1457
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-23 23:02
个人简介

1、刚工作时做Linux 流控;后来做安全操作系统;再后来做操作系统加固;现在做TCP 加速。唉!没离开过类Unix!!!但是水平有限。。

文章存档

2015年(80)

2013年(4)

2012年(90)

2011年(177)

2010年(1)

2009年(1)

分类:

2011-12-08 13:11:18

经常我们会在用户空间程序中引用一些内核提供的函数,例如链表、原子操作等。

解决方法:
1、将内核相应的头文件和实现代码,拷贝出来,嵌入到用户空间程序中,进行编译

2、IINCLUDE路径指定上内核头文件
-I/lib/modules/$(shell uname -r)/build/include
但是这个时候,需要注意内核里面的一些宏,内核中会根据一些宏来区分变量的定义或者是类型的声明。也就是说,如果没有定义相应的宏,就会没有一些类型的定义或者是变量的声明。

建议:
#include
-I/lilb/modules/$(shell uname -r)/build/include
-D__KERNEL__

但是,这样并不一定能够解决所有的问题。

建议,采用第一种方法直接将内核头文件移植到用户空间程序中,问题会相对少一些。

举例:
root@dell-desktop:~# cat t.c
#include

//typedef _Bool bool;
bool is_power_of_2(unsigned long n)
{
    return (n != 0 && ((n & (n - 1)) == 0));
}

root@dell-desktop:~# gcc -c t.c -I/lib/modules/2.6.26/build/include/ -D__KERNEL__

比较复杂的例子,就很难一次成功了。

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