2017-10-20 55 views
0

J'ai un module noyau qui implémente une minuterie et cela fonctionne. En même temps, je suis capable de créer un nouveau module noyau pour écrire et lire depuis proc. Ce que je ne comprends pas, c'est comment combiner les deux opérations dans le même module du noyau.Écrire dans proc dans un module du noyau qui utilise aussi un périphérique de caractères

Mon application fonctionne de cette manière. Un programme utilisateur écrit dans le module du noyau un numéro n qui est utilisé pour créer un temporisateur qui expirera dans n millisecondes. Pour ce faire, j'ai implémenté les fonctions write et read et je les ai liées au struct file_operations que j'utilise dans la fonction init pour enregistrer mon périphérique de caractères (le temporisateur).

Maintenant pour le fichier proc je dois également déclarer une fonction write et read qui devrait gérer les demandes du programme utilisateur. C'est ce qui me trouble, je n'arrive pas à comprendre comment tout concilier.

+1

Il suffit de définir deux ** différentes ** des variables 'struct file_operations'. Utilisez un pour le périphérique de caractères, et un autre - pour le fichier proc. Ils sont réellement indépendants. – Tsyvarev

+0

@Tsyvarev Mais j'ai besoin d'écrire le nombre 'n' que l'utilisateur fournit dans proc, donc dans mon module le timer et proc ne sont pas indépendants. – David

+0

@David il voulait dire que les opérations de fichiers sont indépendantes. – Sasi

Répondre

1

Comme mentionné Tsyvarev utiliser différentes file_operations

static struct proc_dir_entry *procfs; 

static const struct file_operations proc_fops = { 
.owner = THIS_MODULE, 
.open = open_proc_fn, 
.read = read_proc_fn, 
}; 

static const struct file_operations char_fops = { 
.owner = THIS_MODULE, 
.open = open_char_fn, 
.read = read_char_fn, 
.write = write_char_fn, 
}; 


int __init init_mod (void) { 
    procfs = proc_create("filename", 0, NULL, &proc_fops); 
    if(!proc) 
     return -1; 
    <Register char device with &char_fops > 
    return 0; 
}