checkpatch.pl

chmod +c /usr/src/kernels/3.10.0-862.el7.x86_64/scripts/checkpatch.pl
$ /usr/src/kernels/3.10.0-862.el7.x86_64/scripts/checkpatch.pl--no-tree -f sample_module.c

主要用来检查代码风格,比如{的位置,换行符(\r\n or\n), 行尾空格,每行超过80个字符等.

Coccinelle

Coccinelle是一个程序的匹配和转换引擎,它提供了语言SMPL(语义补丁语言)用于指定C代码所需的匹配和转换。Coccinelle 最初是用来帮助Linux的演变,支持更改库应用程序编程接口,比如重命名一个函数,增加一个依赖于上下文的函数参数或者重新组织一个数据结构。除此之外,Coccinelle页被人用来查找或者修复系统代码的bug。

没有用过

cocci:
    make -C /lib/modules/`uname -r`/build coccicheck MODE=report M=`pwd` 

sparse

静态语义检查工具

git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git 
cd sparse
make
make install

在makefile中添加

sparse:
    make C=2 -C /lib/modules/`uname -r`/build  M=`pwd`

C=2 表示为内核所有 C 文件(即使不需要重新编译)执行 sparse 语义检查:

C=1 表示为内核所有需要重新编译的 C 文件执行 sparse 语义检查:

GCC warnings

Extra gcc warnings ● make W=1 Added by Borislav Petkov Generally useful warnings ● make W=12 Possibly useful warnings ● make W=123

overload

用了这个选项后,我的内核模块代码有大量的编译警告!!!!!

smatch

make C=1 CHECK="smatch -p=kernel"

https://repo.or.cz/w/smatch.git

Smatch 分析程序代码的逻辑错误。它可以检测到诸如“为一个没锁上的 spinlock 执行解锁”的逻辑错误

参考

https://elinux.org/images/d/d3/Bargmann.pdf

已经下载了.