GNU/Linux >> Tutoriels Linux >  >> Linux

Comment construire un module de noyau Linux pour qu'il soit compatible avec toutes les versions du noyau ?

En bref :vous à peine peut écrire un module de noyau utile, qui peut être chargé dans des noyaux d'une gamme relativement large de versions.

Lorsque vous construisez le module sur le noyau compilé avec CONFIG_MODVERSIONS (comme dans votre cas), pour chaque symbole exporté depuis le noyau, le CRC de ce symbole est stocké dans le fichier du module. Le CRC est une sorte de somme de contrôle , qui prend en compte, entre autres, la disposition des types, utilisés pour les paramètres de la fonction. Par exemple, si la disposition d'un hypothétique struct A diffère dans deux noyaux, CRC pour la fonction f(struct A *a) dans ces noyaux diffère également.

Lorsqu'un module est chargé dans le noyau en cours d'exécution, les CRC de toutes les fonctions du module sont comparés à ceux du noyau. S'ils diffèrent, le noyau refuse de charger le module. Pour en savoir plus sur ce mécanisme, consultez la documentation du noyau (Documentation/kbuild/modules.txt).

Ainsi, pour rendre un module chargeable dans deux noyaux différents, vous n'êtes limité qu'aux fonctions dont les paramètres ont la même disposition dans les deux noyaux. En particulier, si mise en page de type struct module diffère, aucun module ne peut être chargé pour les deux noyaux.

Il existe plusieurs approches pour fournir un pilote adapté à plusieurs noyaux. Le plus simple est de livrer les sources du conducteur et ajoutez-les à dkms . De cette façon, si le noyau en cours d'exécution n'a pas le pilote construit, le pilote sera compilé automatiquement en utilisant ses sources.


Linux
  1. Comment créer des paquets rpm

  2. Comment utiliser la commande Rmmod sous Linux avec des exemples

  3. Comment trouver tous les fichiers se terminant par .rb avec Linux ?

  4. Comment installer un module pour tous les utilisateurs avec pip sous linux ?

  5. Puis-je créer une distribution Linux avec libc au lieu de glibc

Comment construire le noyau Linux à partir de zéro {Guide étape par étape}

Comment charger et décharger les modules du noyau sous Linux

Commande Modprobe sous Linux

Afficher les informations du module du noyau Linux avec la commande Modinfo

Comment construire le noyau Linux à partir de zéro

Comment compiler le noyau Linux à partir de la source pour créer un noyau personnalisé