2010-11-06 15 views
0

我正在編譯一個與linux創建kthreads相關的內核模塊來實現並行性,但我被困在編譯問題。sys/wait.h和sys/kthread.h不能一起編譯

這裏是我的代碼:

#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); 

我的代碼的問題是,當我編譯我的內核模塊時許,SYS/wait.h給出像「的一些strcut XYZ重新定義」任何許多編譯錯誤更多的錯誤,當linux/module.h和linux/kthread.h也包括在內。只要我註釋掉這兩個文件,模塊編譯得很好,但給出了一個鏈接錯誤,「waitpid」未定義。

爲什麼sys/wait.h不能很好地與linux/kthread.h和linux/module.h一起編譯?有沒有人遇到過這個問題?

任何幫助,將不勝感激。

+0

你的makefile是什麼樣的? – 2010-11-06 07:00:53

回答

3

在內核代碼中包含用戶空間頭文件(如sys/wait.h)是不正確的。

+0

在內核中調用'waitpid()'不正確! – mpe 2010-11-08 14:55:53

+0

那麼在內核空間中使用waitpid有什麼選擇? – 2010-11-09 14:30:41

+1

@Jewel賊:使用完成。在模塊出口例程中使用'wait_for_completion()',並在線程函數的末尾使用'complete_and_exit()'。 – caf 2010-11-09 21:53:11