C'è un modo per far funzionare Splint o un analizzatore statico simile con i moduli del kernel Linux?
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:
- Come posso correggere l'errore insmod?
- Come posso ottenere un splint per giocare bene con le intestazioni del kernel?
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.