Je suis en train de compiler un module noyau sous linux relatif à la création de kthreads pour atteindre le parallélisme mais je suis bloqué à la compilation des problèmes.sys/wait.h et sys/kthread.h ne compilent pas ensemble
Voici mon code:
#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);
Le problème avec mon code est que lorsque je compile mon module de noyau avec make, sys/wait.h donne compilant des erreurs comme « redéfinition de certains strcut xyz » Et de nombreux plus d'erreurs, lorsque linux/module.h et linux/kthread.h sont également inclus. Dès que je commente ces deux fichiers, le module se compile bien mais donne une erreur de liaison que "waitpid" n'est pas définie.
Pourquoi does sys/wait.h ne se compile pas avec linux/kthread.h et linux/module.h? Quelqu'un at-il déjà rencontré ce problème?
Toute aide serait appréciée.
À quoi ressemble votre makefile? –