¿Hay alguna manera de hacer que Splint o un verificador estático similar funcione con los módulos del kernel de Linux?

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

Pregunta

Compilé (sin advertencias) el ejemplo de hello-5.c de " La Guía de programación del módulo del kernel de Linux " y cuando lo intenté, recibí el siguiente error:

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

Pensé que intentaría hacer una férula para ver si surgía algún error obvio, pero cuando lo ejecuté obtuve una gran cantidad de advertencias de los encabezados del kernel hasta que intenté analizar 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.

Entonces realmente hay dos preguntas:

  1. ¿Cómo soluciono el error insmod?
  2. ¿Cómo obtengo una férula para jugar bien con los encabezados del kernel?
¿Fue útil?

Solución 2

No estoy seguro, pero esto podría ser lo que estoy buscando:

splint-Discuss Uso de Splint en los módulos del kernel de Linux

Proporciona un archivo de creación personalizado para ayudar a la férula a atravesar las extensiones específicas de gcc utilizadas en el Kernel.

Otros consejos

Divertido. Actualmente estoy sentado en la oficina y tratando de ejecutar un comprobador estático en los controladores del kernel de Linux :)

Los revisores estáticos tienen dificultades para procesar el kernel de Linux, ya que el dialecto C utilizado en el código del kernel es más amplio que el que se entiende comúnmente como lenguaje C. A veces sucede que la interfaz C de un verificador simplemente no puede analizar las construcciones siempre cambiantes utilizadas en el código.

Como pude entender, simplemente utiliza una versión desactualizada del corrector ( 03 Nov 2006 ), pero la versión de su kernel también está desactualizada, y no sé cuál es más antigua. Lo que puede ayudar es actualizar el verificador a su versión actual, o usar el front-end C actualizado, si el verificador admite el cambio.

Por otra parte, si un verificador puede procesar el kernel de Linux, el hecho es que se está presumiendo en la página de inicio del verificador. Por lo tanto, elija uno que lo reclame y haga sus cheques.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top