Módulos del kernel de Linux: cuándo usar try_module_get / module_put
Estaba leyendo el LKMPG (Ver Sección 4.1.4. Desregistrar un dispositivo ) y no me quedó claro cuándo usar eltry_module_get / module_put
funciones Algunos de los ejemplos de LKMPG los usan, otros no.
Para añadir a la confusión,try_module_get
Aparece 282 veces en 193 archivos en la fuente 2.6.24, pero enControladores de dispositivos Linux (LDD3) yControladores de dispositivos Linux esenciales, aparecen en ni siquiera un solo ejemplo de código.
Pensé que tal vez estaban atados a los viejos.register_chrdev
interfaz (sustituida en 2.6 por la interfaz cdev), pero solo aparecen juntas en los mismos archivos 8 veces:
find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .
Entonces, ¿cuándo es apropiado usar estas funciones y están relacionadas con el uso de una interfaz particular o un conjunto de circunstancias?
Editar
Cargué elsched.c Ejemplo del LKMPG y probé el siguiente experimento:
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
Esto me lleva a creer que el kernel ahora tiene su propia contabilidad y que las entradas y salidas pueden estar obsoletas. ¿Alguien puede verificar esto?