Gibt es eine Möglichkeit zu bekommen Splint oder ein ähnlichen statischen checker mit Linux Kernel-Module zu arbeiten?

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

Frage

I zusammengestellt (keine Warnung) das hello-5.c Beispiel von „ dem Linux-Kernel-Modul Programmieranleitung “und als ich versuchte, es zu insmod, erhielt ich folgende Fehlermeldung:

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

Ich dachte, ich würde versuchen, Schiene zu sehen, ob es mit irgendwelchen offensichtlichen Fehlern kam, aber wenn ich es lief habe ich eine ganze Reihe von Warnungen aus den Kernel-Header, bis sie versuchen, barfed asm/types.h zu analysieren

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.

So wirklich gibt es zwei Fragen:

  1. Wie kann ich den insmod Fehler zu beheben?
  2. Wie erhalte ich Schiene mit den Kernel-Header schön zu spielen?
War es hilfreich?

Lösung 2

Ich bin nicht sicher, aber dies könnte das sein, was ich suche:

Schiene-discuss Splint verwendet auf Linux-Kernel-Module

Es stellt eine benutzerdefinierte Datei machen Schiene durch die gcc spezifische Erweiterungen im Kernel verwendet zu helfen.

Andere Tipps

Lustig. Zur Zeit im Büro sitze ich und versuche, eine statische checker auf Linux-Kernel-Treiber ausgeführt werden:)

Statische Prüfroutinen haben eine harte Zeit Verarbeitung Linux-Kernel, weil C-Dialekt im Kernel-Code verwendet wird, ist breiter als die gemeinhin als „C-Sprache“ zu verstehen. Manchmal kommt es vor, dass C-Front-End eines Checker einfach nicht analysieren kann Konstrukte im Code verwendeten ständig verändernden.

Wie kann ich verstehen, verwenden Sie einfach eine veraltete Version des Checkers (03 Nov 2006), aber Ihre Kernel-Version ist zu veraltet, und ich weiß nicht, was älter ist. Was kann helfen, ist es, die Prüfer zu der aktuellen Version zu aktualisieren, oder mit up-to-date C-Front-End, wenn die Checker es Schalt unterstützt.

Außerdem, wenn ein Kontrolleur Linux-Kernel verarbeiten kann, geradezu die Tatsache, auf der Homepage des checker prahlte wird wird. Also, eine auswählen, die es behauptet, und tun Sie Ihre Schecks.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top