Модули ядра Linux: когда использовать try_module_get / module_put
Я читал 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
Это наводит меня на мысль, что ядро теперь ведет собственный учет, а операции получения / размещения могут быть устаревшими. Кто-нибудь может это проверить?