Я читал 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 .
Итак, когда целесообразно использовать эти функции и связаны ли они с конкретным интерфейсом или множеством обстоятельств?
Edit
Я загрузил пример sched.c из LKMPG и попробовал следующий эксперимент:
[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
Это заставляет меня думать, что ядро теперь делает собственный учет, а gets/puts может быть устаревшим. Кто-нибудь может это подтвердить?