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 .