Como obter uma lista de módulos de kernel externos instalados?

5

Da documentação do kernel Linux 3.2 ( Documentation / kbuild / modules.txt )

=== 5. Module Installation

Modules which are included in the kernel are installed in the
directory:

    /lib/modules/$(KERNELRELEASE)/kernel/

And external modules are installed in:

    /lib/modules/$(KERNELRELEASE)/extra/

Isto implica que, se eu olhar em /lib/modules/$(KERNELRELEASE)/extra/ , posso encontrar todos os módulos do kernel externos instalados. No entanto, acho que o driver de vídeo oficial da Nvidia instala nvidia.ko em /lib/modules/$(KERNELRELEASE)/kernel/drivers/video/ . Isso contradiz a regra acima e sugere que o caminho não é um indicador confiável de módulos incluídos / externos.

Como obter uma lista de módulos de kernel externos instalados? Se a distro é importante, gostaria de saber a resposta para o RHEL 6 e o Ubuntu 10.04.

    
por netvope 26.01.2012 / 04:14

1 resposta

3

Para o Debian / Ubuntu, algo como

dpkg -S *.ko | grep /lib/modules | grep -v linux-image

deve funcionar. Disclaimer: Eu sou analfabeto quando se trata de correspondência de padrões, então provavelmente há maneiras melhores de fazer isso. No meu sistema, recebo

nvidia-kernel-2.6.32-5-vserver-686-bigmem: /lib/modules/2.6.32-5-vserver-686-bigmem/nvidia/nvidia.ko
nvidia-kernel-2.6.26-2-vserver-686-bigmem: /lib/modules/2.6.26-2-vserver-686-bigmem/nvidia/nvidia.ko
nvidia-kernel-2.6.26-1-vserver-686-bigmem: /lib/modules/2.6.26-1-vserver-686-bigmem/nvidia/nvidia.ko

Isso supõe que todos os módulos instalados são conhecidos pelo sistema de empacotamento, mas isso geralmente é uma boa ideia. Pelo menos no Debian, instalar módulos do kernel como pacotes binários é geralmente possível. Esta abordagem tem a vantagem de lhe dizer em qual pacote um módulo do kernel pertence. Abordagens semelhantes devem funcionar com outras distribuições Linux que usam um sistema de gerenciamento de pacotes; ou seja, a maioria deles.

Como a localização de módulos de terceiros é semelhante aos módulos in-kernel, não é fácil distingui-los. Consultar o gerenciador de pacotes facilita as coisas. No entanto, no meu kernel atualmente em execução, no diretório /lib/modules/2.6.32-5-vserver-686-bigmem , percebo que os módulos nvidia estão em um diretório separado dos módulos principais do kernel, ou seja, /lib/modules/2.6.32-5-vserver-686-bigmem/nvidia vs /lib/modules/2.6.32-5-vserver-686-bigmem/kernel . Eu não sei se esse layout é uma política do Debian ou não. A coisa mais próxima da política do kernel do Debian que eu conheço é o Manual do Kernel da Debian , mas eu não achei nada relevante lá . Obviamente, o Ubuntu não está limitado pela política do Debian em nenhum caso.

    
por 26.01.2012 / 17:17