Я собираю модуль ядра в 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? Кто-нибудь сталкивался с этой проблемой раньше?
Любая помощь будет оценена.