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ć?