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

标签 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 与内核头文件兼容?

最佳答案

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

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

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

而且,如果一个检查者可以处理Linux内核,这个事实完全可以在检查者的主页上吹嘘。因此,选择一个声明它并进行检查。

关于linux - 有没有办法让 Splint 或类似的静态检查器与 Linux 内核模块一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1620671/

相关文章:

javascript - 分配给导出与分配给模块有什么区别?

linux - Praat 脚本在 Ubuntu 中抛出 "unknown function"错误

linux - 如何防止 grep 打印尾随换行符?

python - ls-l 执行 popen 时出现问题

c# - WPF, Prism : How to access non-static method in other module?

javascript - 基于 process.env.NODE_ENV 的条件导出 ES6 模块的可能性?

TCP 和 SCTP 上的 Linux 内核

linux - kmalloc() 分配的内存是否自动释放?

regex - 带正则表达式的 Linux 命令行 Zip

macos - 你能推荐什么关于 OSX 内部结构的书?