Estaba leyendo el LKMPG (See Section 4.1.4. Unregistering A Device) y no me queda claro cuándo utilizar las funciones try_module_get/module_put
. Algunos de los ejemplos de LKMPG los usan, otros no.Linux Kernel Modules: Cuándo usar try_module_get/module_put
Para aumentar la confusión, aparece try_module_get
282 veces en 193 archivos de la fuente 2.6.24, sin embargo, en Linux Device Drivers (LDD3) y Essential Linux Device Drivers, que aparece en ni un solo ejemplo de código.
pensé que tal vez estaban atadas a la edad register_chrdev
interfaz (sustituida en 2,6 por la interfaz cdev), pero sólo aparecen juntos 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 .
Por eso, cuando es apropiado utilizar estas funciones y están ligadas al uso de una interfaz particular o conjunto de circunstancias?
Editar
he cargado el ejemplo sched.c del LKMPG y probamos el siguiente experimento:
[email protected]:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594
[email protected]:~$ lsmod | grep sched
sched 2868 1
[email protected]:~$ sudo rmmod sched
ERROR: Module sched is in use
Esto me lleva a creer que el núcleo ahora tiene su propia contabilidad y la obtiene/puts puede ser obsoleto. ¿Alguien puede verificar esto?
hay una aparición de 'try_module_get' en el capítulo 14, en el inciso manipulation' cuenta de referencia '(página 367) –
que significaba el libro LDD en mi comentario anterior –