Модули ядра 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

Это наводит меня на мысль, что ядро теперь ведет собственный учет, а операции получения / размещения могут быть устаревшими. Кто-нибудь может это проверить?

Ответы на вопрос(1)

Ваш ответ на вопрос