有没有办法让Splint或类似的静态检查器与Linux内核模块一起使用?

时间:2009-10-25 11:30:31

标签: linux module kernel splint insmod

我从“The Linux Kernel Module Programming Guide”编译(没有警告)hello-5.c示例,当我尝试insmod时,我收到以下错误:

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

我以为我会尝试使用splint来查看它是否出现了任何明显的错误,但是当我运行它时,我从内核头文件中得到了一些警告,直到它试图解析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.

所以真的有两个问题:

  1. 如何解决insmod错误?
  2. 如何让splint与内核头文件一起玩得很好?

2 个答案:

答案 0 :(得分:1)

有趣。目前我正坐在办公室里,试图在Linux内核驱动程序上运行静态检查程序:)

静态检查器很难处理linux内核,因为内核代码中使用的C语言比通常理解为“C语言”的方言更广泛。有时会发生检查器的C前端无法解析代码中使用的不断变化的构造。

据我所知,你只是使用了过时版本的检查器(03 Nov 2006),但你的内核版本也已经过时了,我不知道哪个更旧。如果检查器支持切换它,那么将检查器更新为其当前版本或使用最新的C前端可能会有所帮助。

此外,如果检查程序可以处理Linux内核,那么事实就会在检查程序的主页上被吹嘘。因此,选择一个声称它并进行检查的人。

答案 1 :(得分:1)

我不确定,但这可能就是我要找的东西:

splint-discuss Using Splint on Linux kernel modules

它提供了一个自定义make文件,以帮助splint通过内核中使用的gcc特定扩展。