Des Modules du Noyau Linux: utilisation des try_module_get / module_put

Je lisais le LKMPG ( Voir La Section 4.1.4. Annulation De L'Enregistrement D'Un Périphérique ) et il n'était pas clair pour moi lors de l'utilisation de la try_module_get /module_put fonctions. Certains des LKMPG des exemples d'utilisation, certains ne le font pas.

Pour ajouter à la confusion, try_module_get apparaît 282 fois en 193 fichiers dans le 2.6.24 source, mais dans Linux Pilotes de Périphériques ( LDD3 ) et Essentiel Linux Pilotes De Périphérique, ils s'affiche en même pas un seul exemple de code.

J'ai pensé que peut-être qu'ils étaient attachés à l'ancien register_chrdev interface ( remplacé en 2.6 par la cdev interface ), mais ils n'apparaissent ensemble dans les mêmes fichiers 8 fois:

find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .

Alors, quand est-il approprié d'utiliser ces fonctions et sont-ils liés à l'utilisation d'une interface particulière ou d'un ensemble de circonstances?

Modifier

J'ai chargé le sched.c exemple de la LKMPG et tenté l'expérience suivante:

anon@anon:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594

anon@anon:~$ lsmod | grep sched
sched                   2868  1 

anon@anon:~$ sudo rmmod sched
ERROR: Module sched is in use

Cela me mène à croire que le noyau maintenant-t-il son propre comptabilité et les gets /les met peut-être obsolètes. Quelqu'un peut-il vérifier?

il y a une occurrence de try_module_get dans le Chapitre 14, le paragraphe reference count manipulation (page 367)
Je voulais dire le LDD livre dans mon commentaire précédent

OriginalL'auteur Robert S. Barnes | 2009-11-16