Existe-t-il un moyen de faire en sorte que Splint ou un vérificateur statique similaire fonctionne avec les modules du noyau Linux?

StackOverflow https://stackoverflow.com/questions/1620671

Question

J'ai compilé (sans avertissements) l'exemple hello-5.c à partir de " Guide de programmation du module de noyau Linux " et quand j’ai essayé de le modifier, j’ai reçu l’erreur suivante:

insmod: error inserting 'hello-5.ko': -1 Unknown symbol in module

Je pensais que j'essaierais d'utiliser attelle pour voir si elle contenait des erreurs évidentes, mais lorsque je l'ai exécutée, de nombreux avertissements ont été émis par les en-têtes du noyau jusqu'à ce que le système essaye d'analyser asm / types.h

anon@anon:~/kernel-source/lkmpg$ splint -I/lib/modules/$(uname -r)/build/include hello-5.c
Splint 3.1.1 --- 03 Nov 2006

( ... lots of warnings ... )

/lib/modules/2.6.24-24-insp8600/build/include/asm/types.h:13:24: Parse Error:
    Suspect missing struct or union keyword: __signed__ :
    unsigned short int. (For help on parse errors, see splint -help
    parseerrors.)
*** Cannot continue.

Alors vraiment, il y a deux questions:

  1. Comment puis-je corriger l'erreur insmod?
  2. Comment faire en sorte que l'attelle joue bien avec les en-têtes du noyau?
Était-ce utile?

La solution 2

Je ne suis pas sûr, mais c'est peut-être ce que je recherche:

splint-discussion Utilisation de Splint sur les modules de noyau Linux

Il fournit un fichier de création personnalisé pour aider Splint à se familiariser avec les extensions spécifiques à gcc utilisées dans le noyau.

Autres conseils

Drôle. Je suis actuellement au bureau et j'essaie d'exécuter un vérificateur statique sur les pilotes du noyau Linux:)

Les contrôleurs statiques ont du mal à traiter le noyau Linux, car le dialecte C utilisé dans le code du noyau est plus large que celui couramment appelé "langage C". Il arrive parfois que le C en tête d'un vérificateur ne puisse tout simplement pas analyser les constructions changeantes utilisées dans le code.

Comme j'ai pu le comprendre, vous utilisez simplement une version obsolète du vérificateur ( 03 nov. 2006 ), mais la version de votre noyau est également obsolète et je ne sais pas quelle version est la plus ancienne. Ce qui peut aider est de mettre à jour le vérificateur vers sa version actuelle, ou d’utiliser un frontal C mis à jour, si le vérificateur prend en charge le basculement.

De plus, si un vérificateur est capable de traiter le noyau Linux, le fait de s'en vanter se fait vanter sur la page d'accueil du vérificateur. Alors, choisissez celui qui le réclame et faites vos vérifications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top