Como o kernel Linux usa dinamicamente um módulo?

0

Entendendo o Kernel do Linux diz

The kernel has two key tasks to perform in managing modules. The first task is mak- ing sure the rest of the kernel can reach the module’s global symbols, such as the entry point to its main function. A module must also know the addresses of symbols in the kernel and in other modules. Thus, references are resolved once and for all when a module is linked. The second task consists of keeping track of the use of modules, so that no module is unloaded while another module or another part of the kernel is using it. A simple reference count keeps track of each module’s usage.

É correto que qualquer biblioteca compartilhada possa ser dinamicamente vinculada (usando LD_LIBRARY_PATH ) e carregada dinamicamente (por dlopen() , dlsym() e dlclose() )?

É um módulo uma biblioteca compartilhada para o kernel do Linux?

Como o kernel Linux usa dinamicamente um módulo? É por vinculação dinâmica (usando LD_LIBRARY_PATH ) ou carregamento dinâmico (por dlopen() , dlsym() e dlclose() )?

    
por Tim 17.10.2018 / 15:21

1 resposta

2

Is it correct that any shared library can be both dynamically linked (using LD_LIBRARY_PATH), and dynamically loaded (by dlopen(), dlsym() and dlclose())?

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 (by dlopen(), dlsym() and dlclose())?

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 .

    
por 17.10.2018 / 15:28