web-dev-qa-db-fra.com

Comment la mise à jour du noyau affecte-t-elle les modules personnalisés?

Je suis curieux de savoir ce qui se passe quand tu cours

Sudo apt-get update && Sudo apt-get upgrade

si vous avez installé des modules de noyau personnalisés.

Existe-t-il des points d'ancrage pour réinstaller votre module personnalisé? Les modules ne sont-ils pas complètement affectés par la mise à niveau?

Je pose cette question parce que chaque fois que je fais une mise à niveau, je crains que les modules que j'ai installés à partir de la source ne fonctionnent correctement. Pour l'instant, je n'ai pas encore eu de problèmes, mais j'aimerais en savoir plus sur ce qu'il advient des modules lorsque vous mettez à jour votre noyau via des mises à jour régulières.

5
Caustic

Cela dépend vraiment de comment ce module a été installé. Le mécanisme DKMS est spécifiquement créé pour la recompilation automatique avec le nouveau noyau installé.

Les modules de noyau simples ne sont construits que pour la version pour laquelle ils ont été compilés et continuent à fonctionner lorsque les mises à jour ne ( ne rompent pas - ABI . Cependant, les mises à jour Ubuntu semblent casser l’ABI assez fréquemment et nécessitent la recompilation des modules du noyau. Comme il s’agit d’une tâche très ennuyeuse et répétitive, DKMS a été inventé pour surmonter ce problème. Il insère des points d'ancrage dans APT pour déclencher la compilation et l'installation de la nouvelle version.

Pour afficher les modules de noyau actuels installés à l'aide de DKMS (exemple):

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

Vous pouvez voir ici que j'ai installé certains modules du noyau dans DKMS, seul le nvidiabl moi-même, les autres ont été installés par le package de pilote Nvidia et le package Virtualbox.

Les modules sont situés (installés) dans un répertoire spécifique pour chaque version du noyau:

/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

Pour obtenir un module de noyau personnalisé sans prise en charge de DKMS, il vous faut un "packaging" que vous devrez faire vous-même, vous devrez le recompiler vous-même à chaque fois. En d'autres termes, un "typique" ./configure; make; Sudo make install installera simplement un module de noyau spécifique et vous demandera de le recompiler à chaque fois.

Si vous ne le faites pas, le module du noyau ne sera tout simplement pas trouvé après une mise à jour. Il ne cherchera pas dans l'ancien répertoire et si vous forceriez à le charger, il échouerait probablement. Au cas où l'installation remplacerait celle par défaut du système, elle pourrait aussi charger celle non personnalisée.

Je ne vais pas inclure l'emballage de DKMS ici, car je pense avoir déjà répondu à votre question.

5
gertvdijk