sys / wait.h和sys / kthread.h不能一起编译

时间:2010-11-06 06:56:48

标签: linux-kernel

我正在linux中编译一个与创建kthreads相关的内核模块以实现并行性,但我仍然困在编译问题。

这是我的代码:

#include <linux/init.h>
#include <linux/errno.h>
#include <asm/byteorder.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kthread.h>
#include <linux/types.h>
#include <sys/wait.h>

void threadfn1()
{
 int j;
 for( j = 0; j < 1000000; j++ )
  printk(KERN_INFO "I AM THREAD 1 %d\n",j); 
}

void threadfn2()
{
 int j;
 for( j = 0; j < 1000000; j++ )
  printk(KERN_INFO "I AM THREAD 2 %d\n",j);

}

static int __init abc_init(void)
{
 struct task_struct *t1 = kthread_run(threadfn1, NULL, "thread1");
 struct task_struct *t2 = kthread_run(threadfn2, NULL, "thread2");

 printk(KERN_INFO "HELLO WORLD\n");
 waitpid(-1,NULL,0); // whatever the parameters of waitpid() are
}

static void __exit abc_fini(void)
{
 printk(KERN_INFO "BYE WORLD\n");
}

module_init(abc_init);
module_exit(abc_fini);

我的代码存在的问题是,当我用make编译我的内核模块时,sys / wait.h会在linux / module.h和linux / kthread时给出编译错误,比如“重新定义一些strcut xyz”更多的错误.h也包括在内。一旦我注释掉这两个文件,该模块就可以很好地编译,但会给出一个链接错误,即“waitpid”未定义。

为什么sys / wait.h不能用linux / kthread.h和linux / module.h编译好?有没有人遇到过这个问题?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

在内核代码中包含用户空间标头(如sys/wait.h)是不正确的。