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 :
- 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.) - 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