sys / wait.h и sys / kthread.h не компилируются вместе - PullRequest
0 голосов
/ 06 ноября 2010

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

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

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

1 Ответ

3 голосов
/ 08 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...