GNU/Linux >> Tutoriels Linux >  >> Linux

Pas d'accord sur la version du symbole symbol_name après insmod

Vous devez construire votre module de noyau avec la même version de noyau que vous allez exécuter. Ainsi, si vous avez téléchargé les sources du noyau 4.3, vous devez compiler cela version du noyau et démarrez avec celle-ci en cours d'exécution avant d'essayer de charger votre noyau.

Vous avez alors deux solutions :

  1. Téléchargez les sources du noyau pour le noyau que vous utilisez actuellement (vous pouvez les installer avec zypper install kernel-source sur SLES ou une commande équivalente sur d'autres distributions.)
  2. Compilez et installez le noyau 4.3 dans votre système d'exploitation. Si vous avez besoin d'aide pour cela, posez une question distincte (et elle appartient probablement au superutilisateur et non ici). Notez que si le noyau et la glibc sont étroitement couplés, il est possible que vous ne puissiez pas exécuter un nouveau noyau si vous avez une très ancienne bibliothèque C.

make -C /lib/modules/$(uname -r)/build M=$PWD modules,"$(uname -r)" montre que vous compilez avec la version du noyau que vous utilisez actuellement, vous devriez donc pouvoir insmod le module dans le noyau actuel si vous n'avez pas changé les en-têtes.

D'après votre texte, "Juste pour vérifier, j'ai copié quelques fichiers des répertoires du noyau dans le répertoire de mon projet. J'y ai apporté des modifications et y ai inséré quelques codes supplémentaires."

Si vous avez apporté des modifications à la source du noyau, vous devrez peut-être recompiler le nouveau noyau et démarrer avec le nouveau noyau mis à jour. Ensuite, vous devriez pouvoir compiler votre module noyau avec les en-têtes modifiés.


Le problème ici est que votre module Kernel utilise les symboles exportés d'autres modules du noyau qui, dans ce cas, semblent être les méthodes ou symboles exportés de la pile Linux InfiniBand RDMA.

Pour résoudre les problèmes de version de symbole, copiez le Module.symvers fichier à partir du

/usr/src/ofa-kernel

répertoire et collez-le dans votre répertoire de travail actuel. Ensuite, vous refaites vos modules. Maintenant le insmod devrait fonctionner parfaitement.

REMARQUE :Le fichier Module.symvers contient des informations sur tous les symboles exportés du kernelmodule. Ainsi, en le copiant dans votre répertoire de travail, vous aidez kbuild à en savoir plus sur les symboles exportés utilisés.

Et si vous ne trouvez pas Module.symvers ou s'il est vide, créez-en un en utilisant create_Module.symvers.sh


Linux
  1. Linux – Un noyau corrompu sous Linux ?

  2. Bloquer les mises à jour du noyau avec Dpkg ?

  3. insmod :commande introuvable

  4. Comment trouver la version d'un module du noyau compilé ?

  5. modifications des paramètres du module du noyau (à l'aide de /sys/module)

Comment charger ou décharger un module du noyau Linux

Version du noyau Ubuntu 22.04

Comment vérifier la version du noyau sous Linux

Commande Modprobe sous Linux

Ignorer le module du noyau au démarrage

Qu'est-ce qu'un noyau teinté sous Linux ?