I know modprobe can be used to load modules, but how does it decide which modules to load?
Quando o kernel precisa de um recurso que não é residente no kernel, o daemon de módulo do kernel kmod
1 execs modprobe
para carregar o módulo em. modprobe
é passado uma string em uma das duas formas.
- Um nome de módulo como softdog ou ppp.
- Um identificador mais genérico, como char-major-10-30
Então, deixe-me explicar o que encontrei no meu sistema em vez de colar no link.
cat /proc/modules
- Este comando lista quais módulos são carregados e a lista é uma lista muito grande.
Agora, durante a inicialização do sistema, como já mencionei, o daemon kmod
executa o modprobe
para carregar os módulos. Poderíamos especificar o módulo a ser carregado de duas maneiras, conforme já discutido. Se tivermos especificado um identificador genérico, ele procurará essa entrada em /etc/modprobe.conf
para o alias. Então, no meu /etc/modprobe.conf
, eu tenho um alias como abaixo.
alias eth0 tg3
Então, eu corri o comando abaixo para verificar o que é tg3 no meu sistema.
-bash-3.2$ cat /proc/modules | grep tg3
tg3 139225 0 - Live 0xf8bd1000
Em seguida, modprobe
examina o arquivo /lib/modules/version/modules.dep
, para ver se outros módulos devem ser carregados antes que o módulo solicitado possa ser carregado. Este arquivo é criado por depmod -a
e contém dependências do módulo.
Por fim, modprobe
usa insmod
para primeiro carregar qualquer módulo de pré-requisito no kernel e, em seguida, o módulo solicitado. modprobe
direciona insmod
para /lib/modules/version/
[3], o diretório padrão para módulos. insmod
pretende ser bastante burro sobre a localização dos módulos, enquanto modprobe
está ciente da localização padrão dos módulos, sabe como descobrir as dependências e carregar os módulos na ordem correta.
Mas como o novo hardware é detectado?
EstesanéissãocriadospelaCPUenãopeloSO.QualquerkerneldosistemaoperacionaloperanoRing0,queéonívelmaisprivilegiadoepodesecomunicardiretamentecomohardwareeaCPU.Anéis1e2sãocomumenteusadosparadriversdedispositivo.Eoanel3éusadoparaaplicativosdeespaçodousuário(mediaplayers,servidoresdawebequalqueroutracoisacomaqualousuáriopossasecomunicardiretamente).Osdriversdedispositivossãouma“ponte”entreaplicativosehardwaredoespaçodousuário.
OkerneldoLinuxverificaconstantementetodososbusdoseucomputadorembuscadealteraçõesenovoshardwares.Quandoqualqueralteraçãoemqualquerbarramentoédetectada,amágicacomeça.
Amagia
- EXPORTARINFORMAÇÕESDEHARDWAREPARAUSERSPACE(SYSFS)
- *NOTIFICAOUSERSPACETOOLSQUEOHARDWAREESTÁDISPONÍVEL(UEVENTEUDEVD)
- Sim,suasuposiçãoestácorreta.Oudevtemalgoavercomamágica:)*
- PROCESSODEUEVENTES,CORRESPONDE-OSCONTRAASREGRASEM/ETC/UDEV/RULES.D/ANDDIRETÓRIOPOPULATE/DEV(UDEVDEUDEV)
- CARREGADORDEDISPOSITIVOS(UDEV,MODPROBLE)
- NOTIFICAASAPLICAÇÕESUSERSPACE(ATRAVÉSDED-BUS)
UdevdisjustadaemonstandinginbetweentheKernelandalltheudevsystemandperformsomeimportantfunctions(I’llmentionthemlater).Theudevdaemon(udevd)isstartedatstartupthenreadsandparsesalltherulesfoundin/etc/udev/rules.d/andkeeptheserulesinmemory(udevdatabase)forfurtherusagebyudev.LaterudevdstarttolistenonthenetlinkforueventscommingfromKerneldrivercore.
Referências
link - link