C'è un modo per far funzionare Splint o un analizzatore statico simile con i moduli del kernel Linux?

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

Domanda

Ho compilato (nessun avvertimento) l'esempio hello-5.c da " La guida alla programmazione del modulo kernel Linux " e quando ho provato a insmod, ho ricevuto il seguente errore:

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

Ho pensato di provare a splint per vedere se presentava errori evidenti, ma quando l'ho eseguito ho ricevuto una serie di avvertimenti dalle intestazioni del kernel fino a quando ha fallito nel tentativo di analizzare 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.

Quindi in realtà ci sono due domande:

  1. Come posso correggere l'errore insmod?
  2. Come posso ottenere un splint per giocare bene con le intestazioni del kernel?
È stato utile?

Soluzione 2

Non sono sicuro, ma potrebbe essere quello che sto cercando:

splint-discuss Uso di Splint su moduli del kernel Linux

Fornisce un file make personalizzato per aiutare splint a superare le estensioni specifiche di gcc usate nel kernel.

Altri suggerimenti

divertente. Attualmente sono seduto in ufficio e sto cercando di eseguire un controllo statico sui driver del kernel Linux :)

I controllori statici hanno difficoltà a elaborare il kernel Linux, perché il dialetto C usato nel codice del kernel è più ampio di quello comunemente inteso come "linguaggio C". A volte capita che il front-end C di una pedina non riesca proprio ad analizzare i costrutti in continua evoluzione usati nel codice.

Come ho capito, usi semplicemente una versione obsoleta del checker ( 03 Nov 2006 ), ma anche la tua versione del kernel è obsoleta e non so quale sia la più vecchia. Ciò che può essere utile è aggiornare il correttore alla sua versione corrente o utilizzare un front-end C aggiornato, se il controllore supporta il passaggio.

Inoltre, se un controllore è in grado di elaborare il kernel Linux, il fatto reale viene vantato sulla homepage del controllore. Quindi, scegline uno che lo reclami e fai i tuoi controlli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top