un exemple de copy_from_user() ? noyau et l'espace utilisateur

Je suis à la recherche de la copie PID valeur à partir de l'espace Utilisateur espace Noyau vers l'espace, voici mon code s'enclenche.

Module De Noyau:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/siginfo.h>
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include <linux/uaccess.h>
#include <linux/signal.h>
MODULE_LICENSE ("GPL");

struct siginfo sinfo;
pid_t pid;
struct task_struct *task;
int init_module () {
memset(&sinfo, 0, sizeof(struct siginfo));
sinfo.si_signo = SIGIO;
sinfo.si_code = SI_USER;
pid = 5218; //Everytime a new PID 
//task = find_task_by_vpid(pid); //I am also working on new and old version of UBUNTU so thats why this is here
task = pid_task(find_vpid(pid), PIDTYPE_PID); 
printk("%d .\n", task);
if(task == NULL) {
printk("Cannot find PID from user program\r\n");
return 0;
}
send_sig_info(SIGIO, &sinfo, task);
return 0;
}
void cleanup_module () {
printk(KERN_ALERT"\nGoodBye World\n\n");
}

De L'Espace Utilisateur Code:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
void signal_handler (int signum){
if (signum == SIGIO) printf ("SIGIO\r\n"); return;
}
int main () {
int i=1 ;
signal(SIGIO, signal_handler);
printf("My PID is %d.\n",getpid());
while (i);
return 0;
}

Maintenant, ici, je suis toujours en cours d'exécution de l'utilisateur de l'espace pour obtenir PID et puis j'ai toujours l'avoir à modifier le pid variable dans le module du Noyau.

J'ai trouvé un moyen d'accéder aux informations à partir de l'espace utilisateur vers l'espace Noyau et vice-versa (c'est à dire, à l'aide de copy_from/to_user() )

Mais je suis incapable de comprendre l'un ou l'autre pour obtenir un PID à partir de l'espace utilisateur, je dois faire un fichier dans /dev répertoire et doit s'appliquer à toutes les fonctions requises pour simplement aller PID?

Est-il un autre moyen? si non, alors quelqu'un peut-il m'aider à faire cela? Je suis nouveau dans la programmation en c et en jouant avec le module du noyau directement, il est donc difficile pour moi.

InformationsquelleAutor Raheel | 2012-05-22