Je lisais le LKMPG (See Section 4.1.4. Unregistering A Device) et je ne savais pas quand utiliser les fonctions try_module_get/module_put
. Certains exemples de LKMPG les utilisent, d'autres non. Pour ajouter à la confusion, try_module_get
apparaît 282 fois dans 193 fichiers dans la source 2.6.24, mais dans Linux Device Drivers (LDD3) et Essential Linux Device Drivers, ils n'apparaissent même pas dans un seul exemple de code.Linux Kernel Modules: Quand utiliser try_module_get/module_put
Je pensais que peut-être qu'ils étaient liés à l'ancienne interface register_chrdev
(remplacée en 2.6 par l'interface cdev), mais ils apparaissent seulement 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é utiliser ces fonctions et sont-elles liées à l'utilisation d'une interface particulière ou d'un ensemble de circonstances?
Modifier
I chargé le sched.c exemple de la LKMPG et essayé l'expérience suivante:
[email protected]:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594
[email protected]:~$ lsmod | grep sched
sched 2868 1
[email protected]:~$ sudo rmmod sched
ERROR: Module sched is in use
Cela me conduit à croire que le noyau maintenant-t-il sa propre comptabilité et obtient/puts peut être obsolète. Quelqu'un peut-il vérifier cela?
il y a une occurrence de 'try_module_get' au chapitre 14, dans la sous-section' manipulation' de comptage de référence (page 367) –
Je voulais dire le livre LDD dans mon commentaire précédent –