Eu costumava cat /proc/modules
listar os detalhes do processo. O módulo abaixo mostra como 4 instâncias estão presentes:
poe_isr 3046 4 - Live 0xc37e1000 (O)
O que isto significa? Como vejo onde essas instâncias estão sendo usadas? Se o módulo está mostrando como 0 instâncias e ao vivo, o que isso significa? Módulo não carregado ainda ativo?
adcmods 1565 0 - Live 0xc37dd000 (P)
É um contador. Ele pode ser incrementado ou decrementado pela API principal do kernel.
É responsabilidade dos módulos, quando incrementá-lo. Por exemplo, se você tiver um
somefs
módulo no kernel, o comportamento esperado é incrementar esse contador com qualquer montagem de umasomefs
partição e decrementá-lo na desmontagem. Desta forma,somefs
pode garantir que não será removido enquanto houver umasomefs
partição montada.Se o contador de uso do módulo for diferente de zero,
rmmod
falhará nesse módulo. Masrmmod -f
não, se a remoção forçada do módulo for compilada no kernel.Assim, as coisas importantes:
ipv6
funcionam dessa forma, que aumenta o contador para 1 ligadoinsmod
e nunca diminui. Assim, se você compilouipv6
como módulo, nunca poderá fazê-rmmod
lo. Alguns drivers de placas de vídeo funcionam de forma semelhante, pois faltam suas rotinas que iriam desinicializá-la. Nenhum desses módulos pode ser motivo de orgulho para seus desenvolvedores.A 3ª coluna indica que existem 4 módulos/processos dependentes. Daí
rmmod
não vai funcionar. A quarta coluna indica se são módulos ou não módulos. '-' indica que 4 são não-módulos. No exemplo acima, poe_isr depende de 4 não-módulos.