2010-11-06 3 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 хуга» любому множество больше ошибок, когда также включены linux/module.h и linux/kthread.h. Как только я прокомментирую эти два файла, модуль компилируется, но дает ошибку связи, которая «waitpid» не определена.

Почему sys/wait.h хорошо компилируется с linux/kthread.h и linux/module.h? Кто-нибудь сталкивался с этой проблемой раньше?

Любая помощь будет оценена по достоинству.

+0

Как выглядит ваш make-файл? –

ответ

3

Неправильно включать заголовки пользовательского пространства, такие как sys/wait.h, в код ядра.

+0

И неправильно вызвать 'waitpid()' в ядре! – mpe

+0

, то каковы альтернативы waitpid для использования в пространстве ядра? –

+1

@Jewel Thief: используйте завершение. Используйте 'wait_for_completion()' в процедуре выхода модуля и используйте 'complete_and_exit()' в конце функций потока. – caf

Смежные вопросы