Is it correct that any shared library can be both dynamically linked (using
LD_LIBRARY_PATH
), and dynamically loaded (bydlopen()
,dlsym()
anddlclose()
)?
Sim. A diferença é que a vinculação dinâmica é impulsionada pelo vinculador dinâmico e, quando o programa é iniciado (da perspectiva do autor do programa), as bibliotecas foram vinculadas e todos os símbolos foram resolvidos; o carregamento dinâmico envolve fazer tudo isso manualmente.
Is a module a shared library to the Linux kernel?
Mais ou menos, mas os mecanismos de carregamento são diferentes. O vinculador dinâmico e libdl
são apenas espaço do usuário, mas não podem ser usados no kernel.
How does Linux kernel dynamically use a module? Is it by dynamically linking (using
LD_LIBRARY_PATH
), or dynamical loading (bydlopen()
,dlsym()
anddlclose()
)?
O kernel carrega módulos usando load_module
, que não todo o trabalho em si: carregando o objeto ELF, mapeando os segmentos necessários, executando todas as realocações, etc. Ele também executa algumas tarefas específicas do módulo: verificando sua licença, conectando-as em sysfs
, chamando sua função de inicialização ...
load_module
é acessado do espaço do usuário usando as chamadas de sistema init_module
ou finit_module
.