Respostas:
modprobe
lê os módulos de /lib/modules/$(uname -r)/modules.dep.bin
(ou sem o .bin
sufixo, se o outro arquivo não estiver disponível). Do mesmo arquivo, as dependências são carregadas.
modprobe
aceita o nome de um .ko
arquivo em /lib/modules/$(uname -r)
(por exemplo, nvidia-current
para o arquivo dkms/nvidia-current.ko
) e aliases ( modules.alias.bin
). Builtins ( modules.alias.bin
) também são reconhecidos, mas como esses módulos são carregados por padrão, não faz sentido modificar esse tipo de módulo.
insmod
por outro lado, aceita caminhos para arquivos. O módulo não precisa residir /lib/modules/$(uname -r)
, mas as dependências não são carregadas automaticamente. Este é o programa inferior usado modprobe
para carregar módulos.
Outros programas relacionados aos módulos são rmmod
e modinfo
.
rmmod
remove um nome de kernel com base no nome de /proc/modules
. Esse nome não precisa necessariamente ser o mesmo que o passado para modprobe
(para o nvidia-current
arquivo, nvidia
por exemplo).
modinfo
aceita um nome de arquivo ou o nome do arquivo sem .ko
sufixo /lib/modules/$(uname -r)
.
modprobe
é um comando inteligente, procura dependências ao carregar um módulo. Suponha que, se eu carregasse um módulo, que possui símbolos definidos em algum outro módulo (esse caminho é fornecido dentro do módulo principal). Portanto, modprobe
carrega o módulo principal e o módulo dependente.
Mas se insmod
for usado, ele não carregará a dependência e, portanto, dará erros de compilação como Unresolved symbols
. Nesse caso, precisamos procurar manualmente o módulo dependente e precisamos carregá-lo para resolver os erros.
O utilitário modprobe vale uma menção rápida. O modprobe, como o insmod, carrega um módulo no kernel. Ele difere no fato de que ele examinará o módulo a ser carregado para ver se ele faz referência a quaisquer símbolos que não estão definidos atualmente no kernel. Se alguma dessas referências for encontrada, o modprobe procurará outros módulos no caminho de pesquisa do módulo atual que define os símbolos relevantes. Quando o modprobe encontra esses módulos (que são necessários para o carregamento do módulo), eles também são carregados no kernel. Se você usar insmod nessa situação, o comando falhará com a mensagem "símbolos não resolvidos" deixada no arquivo de log do sistema