Moduły jądra Linuksa: Kiedy używać try_module_get / module_put

Czytałem LKMPG (Patrz rozdział 4.1.4. Wyrejestrowanie urządzenia ) i nie było dla mnie jasne, kiedy używaćtry_module_get / module_put Funkcje. Niektóre przykłady LKMPG z nich korzystają, inne nie.

Aby dodać zamieszania,try_module_get pojawia się 282 razy w 193 plikach w źródle 2.6.24, ale wSterowniki urządzeń Linux (LDD3) iNiezbędne sterowniki urządzeń Linux, pojawiają się nawet w jednym przykładzie kodu.

Myślałem, że mogą być przywiązani do staregoregister_chrdev interfejs (zastąpiony w 2.6 przez interfejs cdev), ale pojawiają się tylko razem w tych samych plikach 8 razy:

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

Kiedy więc właściwe jest korzystanie z tych funkcji i czy są one związane z korzystaniem z określonego interfejsu lub zestawu okoliczności?

Edytować

Załadowałemsched.c przykład z LKMPG i wypróbowałem następujący eksperyment:

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

To prowadzi mnie do przekonania, że ​​jądro ma teraz własną księgowość, a get / puts mogą być przestarzałe. Czy ktoś może to zweryfikować?

questionAnswers(1)

yourAnswerToTheQuestion