Como listar todos os módulos carregáveis ​​do kernel?

65

Estou procurando por alguns módulos do kernel para carregar i2c-deve i2c-bcm2708. Mas o modprobecomando retorna:

sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep

Como posso listar todos os módulos disponíveis no sistema? Em qual diretório eles estão localizados?

UserK
fonte
11
O kernel não compilou este i2c-dev. Você não encontrou este módulo. Os módulos do kernel localizam / lib / modules / 'kernel-version' / drivers. Quando você estiver procurando por drivers Linux.
Supriady
Você pode verificar / boot / config-'kernel-version 'e ler este arquivo de configuração. Você deve saber quais módulos Linux são carregados ou modulares ou durante a compilação do kernel não ativou o módulo i2c-dev.
Supriady 18/01/19

Respostas:

76
  • Por padrão, modprobecarrega módulos de subdiretórios localizados no /lib/modules/$(uname -r)diretório Normalmente, todos os arquivos têm extensão .ko, para que você possa listá-los com

    find /lib/modules/$(uname -r) -type f -name '*.ko'
    

    ou, levando em consideração os arquivos compactados:

    find /lib/modules/$(uname -r) -type f -name '*.ko*'
    
  • No entanto, para carregar um módulo, é modprobenecessário ter suas dependências listadas no arquivo /lib/modules/$(uname -r)/modules.dep(e uma versão binária correspondente modules.dep.bin). Se algum módulo estiver presente no sistema, mas não estiver na lista, execute um comando depmodque gere essas dependências e inclua automaticamente seu módulo em modules.depe modules.dep.bin.

  • Além disso, se o módulo for carregado com sucesso, ele será listado no arquivo /proc/modules(também acessado via comando lsmod).

jimmij
fonte
3
Os arquivos do módulo Redhat 7 são compactados em .xz (não tenho certeza se é por causa da versão do kernel ou da versão do SO .. se alguém puder me esclarecer isso?), Então acho que você pode não encontrá-los com o comando find do jimmij. Use em vez disso find /lib/modules/$(uname -r) -type f -name *.ko*
Pozinux 5/10
11
@Pozinux Descobriu a mesma coisa aqui no Arch linux em 4.13.10, que tem o final.gz
Johann
11
@posinux: cuidado: o shell pode expandir o seu *.ko*se você tiver no diretório atual algum arquivo correspondente a ele. melhor escapar entre aspas simples: find /lib/modules/$(uname -r) -type f -name '*.ko*'
Olivier Dulac
10

Digite modprobee pressione a guia, a lista de preenchimento automático deve conter todos os módulos carregáveis

Martin Hansen
fonte
11
ele não funciona para alguns sistemas
avtomaton
5

lsmodcomando do kmodpacote no Arch Linux que lista e mostra o status dos módulos do kernel Linux que contém outros comandos úteis, como modinfo, rmmod modprobetambém.

Para l ist todos os binários fornecidos pelo pacote você pode digitar:

pacman -Ql kmod | grep /bin/ --color=always

, e você também pode verificar o pacote proprietário de um binário com pacman -Qo lsmod.


Qinterruptor é q uery pacotes instalados localmente (ao contrário Sde s ynchronize, ie. verificar remotamente).


fonte
2
Onde é importante destacar que lsmodmostra apenas os módulos carregados. O autor deste segmento teve o problema de carregar um módulo que não estava no mapa dos módulos carregáveis ​​do kernel. Além disso, esta solução se aplica apenas ao archlinux. O que pode não ser a distribuição do autor e pode não resolver o problema para outros.
Akendo 06/02
O @Akendo lsmodtambém está disponível no Ubuntu, pelo menos. No entanto, concordo que isso não resolve o problema do OP.
Melebius
2

Eu prefiro usar depmod. Com o comando depmod -av|grep MOD_NAME:, seu sistema irá gerar os arquivos modules.dep / map e grep através dele. O -vparâmetro é importante para detalhamento e -apara garantir que todos os módulos possíveis /lib/modules/sejam usados ​​para o arquivo modules.dep.

Dessa forma, é possível garantir que um módulo do kernel solicitado seja mapeado para o kernel como carregável. Quando o módulo desejado do kernel não está listado na saída, você sabe que o kernel não o encontrará.

Akendo
fonte