Я читал LKMPG (См. Раздел 4.1.4. Нерегистрация Устройства) и мне не было ясно, когда использовать try_module_get / module_put
функции. Некоторые примеры LKMPG используют их, некоторые не делают.
Добавить к беспорядку, try_module_get
появляется 282 раза в 193 файлах в 2.6.24 источниках, все же в Драйверах устройств Linux (LDD3) и Необходимые Драйверы устройств Linux, они появляются в даже единственном примере кода.
Я думал, возможно, что они были связаны со старым register_chrdev
интерфейс (замененный в 2,6 интерфейсом cdev), но они только появляются вместе в тех же файлах 8 раз:
find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .
Таким образом, когда уместно использовать эти функции, и они связываются с использованием конкретного интерфейса или стечения обстоятельств?
Править
Я загрузил sched.c пример из LKMPG и попробовал следующий эксперимент:
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
Это приводит меня полагать, что ядро теперь делает свой собственный учет, и получение / помещает, может быть устаревшим. Кто-либо может проверить это?