Linux-Kernel-Module: Wann wird try_module_get / module_put verwendet?
Ich habe die LKMPG gelesen (Siehe Abschnitt 4.1.4. Aufheben der Registrierung eines Geräts ) und mir war nicht klar, wann ich das benutzen solltry_module_get / module_put
funktionen. Einige der LKMPG-Beispiele verwenden sie, andere nicht.
Um die Verwirrung hinzuzufügen,try_module_get
Erscheint 282 Mal in 193 Dateien in der 2.6.24 Quelle, noch inLinux-Gerätetreiber (LDD3) undWichtige Linux-GerätetreiberSie erscheinen nicht einmal in einem einzigen Codebeispiel.
Ich dachte, sie wären vielleicht an die Alten gebundenregister_chrdev
interface (ersetzt in 2.6 durch das cdev-Interface), aber sie erscheinen nur 8 Mal zusammen in denselben Dateien:
find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .
Wann ist es also angebracht, diese Funktionen zu verwenden, und sind sie an die Verwendung einer bestimmten Schnittstelle oder eines bestimmten Satzes von Umständen gebunden?
Bearbeiten
Ich habe die geladensched.c Beispiel aus dem LKMPG und versuchte das folgende Experiment:
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
Dies führt mich zu der Annahme, dass der Kernel jetzt seine eigene Buchhaltung betreibt und die get / puts veraltet sein könnten. Kann jemand dies überprüfen?