Ich las die LKMPG (See Section 4.1.4. Unregistering A Device) und es war mir nicht klar, wann die try_module_get/module_put
Funktionen zu verwenden. Einige der LKMPG-Beispiele verwenden sie, andere nicht.Linux Kernel Modules: Wann ich try_module_get/module_put verwenden sollte
zur Verwirrung hinzuzufügen try_module_get
erscheinen 282 mal in 193 Dateien in der 2.6.24 Quelle, noch in Linux Device Drivers (LDD3) und Essential Linux Device Drivers, sie erscheint in nicht einmal ein einzigen Codeb..
Ich dachte, vielleicht sie an die alte register_chrdev
Schnittstelle gebunden wurden (ersetzte in 2.6 durch die cdev Schnittstelle), aber sie nur in den gleichen Dateien 8mal erscheinen zusammen:
find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .
Wenn also ist es angebracht, Verwenden Sie diese Funktionen und sind sie an die Verwendung einer bestimmten Schnittstelle oder einer Reihe von Umständen gebunden?
bearbeiten
ich lud die sched.c zB aus dem LKMPG und versucht, das folgende Experiment:
[email protected]:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594
[email protected]on:~$ lsmod | grep sched
sched 2868 1
[email protected]:~$ sudo rmmod sched
ERROR: Module sched is in use
Das führt mich, dass der Kernel zu glauben, jetzt ist es eigene Buchhaltung ist und die bekommt/puts kann veraltet sein. Kann das jemand verifizieren?
gibt es ein Vorkommen von 'try_module_get' in Kapitel 14, im Abschnitt' Referenzzähler manipulation' (Seite 367) –
bedeuten, dass ich das LDD Buch in meinem vorherigen Kommentar –