Identifica fora dos módulos de árvore?

3

Estou tentando atualizar e testar o kernel 3.12 .

Qual é a maneira mais eficiente de identificar os módulos fora da árvore que devem ser removidos antes do teste?

Existem alguns mencionados (vitualbox, nvidia, fglrx, bcmwl), mas existe uma maneira de identificar módulos instalados que são considerados fora da árvore?

    
por iyrin 16.04.2015 / 16:58

2 respostas

0

Depois de descobrir que o wiki do Ubuntu que estou usando está se referindo a módulos externos , foi mais fácil encontrar uma solução pelo rtfm.

Resumo dos caminhos de instalação dos módulos externos

  • Os módulos externos são instalados com modules_install at /lib/modules/$(KERNELRELEASE)/extra/ por padrão.
  • Ao instalar módulos externos em outro lugar, INSTALL_MOD_PATH é usado para prefixar o caminho de instalação ou INSTALL_MOD_DIR é usado para criar um novo diretório no caminho /lib/modules/$(KERNELRELEASE) usual.

Veja o final desta resposta para uma explicação mais detalhada.

Procurando por módulos externos

Para restringir a pesquisa ao acima, estou usando locate para imprimir caminhos contendo lib/module e xargs para filtrar a saída dos caminhos que não são diretórios.

Por fim, grep -v é usado para filtrar a saída de um caminho que começa com /lib/modules/$(uname -r)/kernel . Isso ainda deve exibir os caminhos que foram prefixados usando INSTALL_MOD_PATH durante a instalação, por exemplo, /frodo/lib/modules/$(KERNELRELEASE)/kernel/ .

Isto obviamente não irá imprimir o caminho dos módulos que foram de alguma forma instalados em um caminho completamente estranho. Aqui está o comando:

locate --null "*lib/modules/$(uname -r)*" | xargs -r0 sh -c 'for i do [ -d "$i" ] && printf "%s\n" "$i"; done' sh {} + | grep -v "^/lib/modules/$(uname -r)/kernel\|^/lib/modules/$(uname -r)$\|^/lib/modules/$(uname -r)/build$\|^/lib/modules/$(uname -r)/initrd$"

Isso remove os caminhos da árvore da saída, o que para mim era de 4695 linhas ao usar apenas locate "*lib/modules/$(uname -r)*" . Agora, a saída é muito menor e deve exibir somente caminhos conhecidos fora da árvore:

/frodo/lib/modules/3.12.3-031203-generic
/frodo/lib/modules/3.12.3-031203-generic/kernel

Trechos da documentação Criando módulos externos

Os detalhes abaixo são de Building External Modules

modules_install
    Install the external module(s). The default location is
    /lib/modules/<kernel_release>/extra/, but a prefix may
    be added with INSTALL_MOD_PATH (discussed in section 5).  
=== 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/

--- 5.1 INSTALL_MOD_PATH

    Above are the default directories but as always some level of
    customization is possible. A prefix can be added to the
    installation path using the variable INSTALL_MOD_PATH:

        $ make INSTALL_MOD_PATH=/frodo modules_install
        => Install dir: /frodo/lib/modules/$(KERNELRELEASE)/kernel/

    INSTALL_MOD_PATH may be set as an ordinary shell variable or,
    as shown above, can be specified on the command line when
    calling "make." This has effect when installing both in-tree
    and out-of-tree modules.

--- 5.2 INSTALL_MOD_DIR

    External modules are by default installed to a directory under
    /lib/modules/$(KERNELRELEASE)/extra/, but you may wish to
    locate modules for a specific functionality in a separate
    directory. For this purpose, use INSTALL_MOD_DIR to specify an
    alternative name to "extra."

        $ make INSTALL_MOD_DIR=gandalf -C $KDIR \
               M=$PWD modules_install
        => Install dir: /lib/modules/$(KERNELRELEASE)/gandalf/
    
por 17.04.2015 / 18:35
1

Os módulos do kernel, sejam na árvore ou fora da árvore, são instalados em diretórios específicos para as versões do kernel ( /lib/modules/$(uname -r) ), então você não precisa limpar os módulos para atualizar para um novo kernel: o O novo kernel simplesmente não considera os módulos antigos.

No entanto, até onde eu sei, os módulos em árvore vão em /lib/modules/$(uname -r)/kernel , então qualquer coisa em /lib/modules/$(uname -r) fora disso é um módulo fora da árvore.

    
por 17.04.2015 / 00:02