Como a atualização do kernel afeta módulos customizados?

5

Estou curioso para saber o que acontece quando você corre

sudo apt-get update && sudo apt-get upgrade

se você tiver módulos de kernel personalizados instalados.

Existem ganchos para reinstalar seu módulo personalizado? Os módulos não são afetados pela atualização?

Eu pergunto isso porque toda vez que faço uma atualização, estou preocupada que os módulos que eu instalei da fonte vão quebrar. Neste momento ainda não tive nenhum problema, mas gostaria de saber mais sobre o que acontece com os módulos quando você atualiza seu kernel através de atualizações regulares.

    
por Caustic 30.01.2013 / 20:09

1 resposta

5

Isso realmente depende de como este módulo foi instalado. O mecanismo do DKMS é criado especificamente para recompilação automática contra o novo kernel instalado.

Módulos de kernel simples são construídos apenas para a versão que foram compilados e continuam funcionando quando as atualizações não quebram o ABI . No entanto, as atualizações do Ubuntu parecem quebrar a ABI com bastante frequência e exigem que os módulos do kernel sejam recompilados. Como esta é uma tarefa muito chata e repetitiva, a DKMS foi inventada para superar isso. Ele insere ganchos no APT para acionar a compilação e instalar a nova versão.

Para visualizar os módulos atuais do kernel instalados usando o DKMS (exemplo):

dkms status
nvidiabl, 0.79, 3.5.0-22-generic, x86_64: installed
nvidiabl, 0.79, 3.7.5-030705-generic, x86_64: installed
nvidia-current, 313.09, 3.5.0-22-generic, x86_64: installed
nvidia-current, 313.09, 3.7.5-030705-generic, x86_64: installed
vboxhost, 4.2.6, 3.5.0-22-generic, x86_64: installed
vboxhost, 4.2.6, 3.7.5-030705-generic, x86_64: installed

Aqui você pode ver que instalei alguns módulos do kernel no DKMS, somente o nvidiabl one, os outros foram instalados pelo pacote do driver da Nvidia e pelo pacote do Virtualbox.

Os módulos estão localizados (instalados) em um diretório específico para cada versão do kernel:

/lib/modules/
├── 3.5.0-22-generic
│   ├── build -> /usr/src/linux-headers-3.5.0-22-generic
│   ├── initrd
│   ├── kernel
│   │   ├── arch
│   │   ├── crypto
│   │   ├── drivers
│   │   ├── fs
│   │   ├── lib
│   │   ├── net
│   │   ├── sound
│   │   └── ubuntu
│   └── updates
│       └── dkms
└── 3.7.5-030705-generic
    ├── build -> /usr/src/linux-headers-3.7.5-030705-generic
    ├── initrd
    ├── kernel
    │   ├── arch
    │   ├── crypto
    │   ├── drivers
    │   ├── fs
    │   ├── lib
    │   ├── mm
    │   ├── net
    │   └── sound
    └── updates
        └── dkms

Para obter um módulo de kernel personalizado sem suporte fornecido para o DKMS, ele precisa de alguma "embalagem" que você mesmo terá que fazer, você terá que recompilar você mesmo toda vez. Em outras palavras, um "típico" ./configure; make; sudo make install apenas instalará um módulo específico do kernel e exigirá que você o recompile o tempo todo.

Se você não o fizer, o módulo do kernel simplesmente não será encontrado após uma atualização. Ele não irá procurar no diretório antigo e se você forçar para carregá-lo, ele provavelmente não será inserido. Caso a instalação sobrescreva uma padrão do sistema, ela também pode carregar a não personalizada.

Não incluirei o pacote DKMS aqui, pois acho que já respondi sua pergunta.

    
por gertvdijk 30.01.2013 / 21:06