3

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

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

我想我会尝试夹板看看它是否出现任何明显的错误,但是当我运行它时,我从内核头文件中收到了一系列警告,直到它试图解析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. 如何让夹板与内核头文件配合得很好?
4

2 回答 2

1

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

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

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

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

于 2009-10-25T11:42:27.900 回答
1

我不确定,但这可能是我正在寻找的:

splint-discuss 在 Linux 内核模块上使用 Splint

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

于 2009-10-25T12:36:04.453 回答