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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage