修改内核代码-打补丁-checkpatch.pl

本文介绍了如何在修改内核代码后制作补丁,使用`diff`命令创建`diff.patch`,并通过`patch`命令应用补丁。重点讲述了利用内核脚本`checkpatch.pl`检查编码规范,通过`checkresult.txt`找出并修正不合规的代码。常见错误包括宏定义、Signed-off-by缺失、typedefs警告和printk用法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们下载一份内核源码,修改了一些代码,需要制作补丁,用diff命令


比如现在有两份内核源码

kernel-old, kernel-new

打补丁,命令为

diff -ruN kernel-old kernel-new > diff.patch

可以通过Kompare,或者直接用gedit打开查看修改的代码


打补丁的命令:

patch -p1或-p0  < ../diff.patch


接着要查看我们修改的代码是否符合内核编码规范

就需要用到内核的脚本checkpatch.pl

命令如下

cd kernel-new

./script/checkpatch.pl ../diff.patch > ../checkresult.txt


打开checkresult.txt查看不符合规范的地方,再修改代码,重新打补丁,直到没有不符合规范的地方

很多都是空格,单行不超过80个字符,tab等错误


下面列出一些碰到过的

ERROR: Macros with complex values should be enclosed in parentheses

复杂的宏要用小括号括起来


ERROR: Missing Signed-off-by: line(s)

这个好像是补丁签名的意思,就是谁打的这个补丁,我是直接忽略这个错误


WARNING: do not add new typedefs

用typedefs出现的警告,不知道怎么把这个取消掉

比如你定义一个结构体 struct xxx

typedef struct xxx *p1;

typedef struct xxx *p2;

就会出现上述警告


WARNING: Prefer [subsystem eg: netdev]_err([subsystem]dev, ... then dev_err(dev, ... then pr_err(...  to printk(KERN_ERR ...

这是用printk的时候会警告

<think>好的,用户想了解checkpatch.pl脚本的信息或用法。首先,我需要确认用户的需求是什么。checkpatch.pl是Linux内核开发中常用的代码风格检查工具,用户可能是在进行内核开发或者驱动开发时需要用到这个工具。用户提到“usage or download”,所以需要提供使用方法和下载方式。 首先,我应该回忆一下checkpatch.pl的基本作用。它主要用于检查代码是否符合Linux内核的编码规范,比如代码格式、注释风格、可能的错误模式等。用户可能需要知道如何运行这个脚本,常见的参数有哪些,以及如何获取这个脚本。 接下来,下载方式。checkpatch.pl通常包含在Linux内核代码中,路径是在scripts/目录下。所以用户需要下载内核源码,然后找到这个脚本。我应该给出具体的步骤,比如使用git克隆内核仓库,或者下载稳定版本的源码包。另外,可能需要提到单独下载的可能性,但通常建议从官方源码获取,以确保版本兼容性。 然后是使用方法。基本的使用命令是运行perl checkpatch.pl加上选项和文件路径。常见的选项比如--file用于检查单个文件,--strict启用更严格的检查,--no-summary来关闭总结信息。用户可能需要例子,比如如何检查一个补丁文件,或者检查整个目录的代码。此外,可以提到一些高级用法,比如集成到Git钩子中,或者结合其他工具使用。 另外,用户可能遇到的常见问题,比如如何忽略某些类型的警告,如何处理错误信息,或者如何调整检查的严格程度。这些也应该涵盖在回答中,帮助用户更好地使用工具。 需要确保回答结构清晰,分点说明下载步骤和使用方法,可能还要加上注意事项或常见问题。同时,根据用户提供的引用,可能没有直接相关的引用内容,但需要确认是否有相关引用可以链接。例如,引用[2]提到了一些编译工具,但可能不相关。用户提供的引用[1]是关于快速排序的,引用[3]是关于ARM工具链的,可能都不相关。因此,回答中可能不需要添加引用标识,除非有相关内容。 最后,生成相关问题,帮助用户进一步了解相关主题,比如其他代码检查工具,如何自动修复代码风格,或者如何配置检查规则等。</think>### checkpatch.pl 脚本信息与用法 #### 1. **脚本简介** `checkpatch.pl` 是 Linux 内核开发中广泛使用的代码风格检查工具,主要用于验证代码是否符合内核编码规范(如变量命名、缩进、注释格式等),并检测潜在错误(如缺少 `break` 的 `switch` 语句)。 --- #### 2. **下载方式** `checkpatch.pl` 包含在 Linux 内核代码中,可通过以下方式获取: - **克隆内核源码仓库**: ```bash git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ``` 脚本路径为:`linux/scripts/checkpatch.pl` - **下载稳定版源码包**: 从 [kernel.org](https://www.kernel.org/) 下载最新稳定版源码,解压后同样在 `scripts/` 目录下。 --- #### 3. **基本用法** - **检查单个文件**: ```bash perl scripts/checkpatch.pl --file drivers/net/ethernet/example.c ``` - **检查补丁文件**: ```bash perl scripts/checkpatch.pl example.patch ``` - **常用参数**: - `--strict`:启用严格模式(如强制检查宏对齐) - `--no-summary`:隐藏统计摘要 - `--terse`:仅显示错误/警告类型 - `--ignore=规则名`:忽略指定规则(如 `--ignore=LINE_SPACING`) --- #### 4. **示例输出解析** 典型输出包含以下部分: ``` ERROR: Missing a blank line after declarations #12: FILE: example.c:12: + int i; + for (i = 0; i < 10; i++) { ``` 建议在变量声明后添加空行以符合规范。 --- #### 5. **集成到开发流程** - **Git 提交前检查**: 将以下命令添加为 Git 预提交钩子(`.git/hooks/pre-commit`): ```bash git diff --cached | perl scripts/checkpatch.pl --no-summary - ``` - **自动化修复工具**: 结合 `clang-format` 或 `Lindent` 脚本自动调整代码格式[^2]。 --- #### 6. **注意事项** - 部分警告需人工判断(如复杂函数的行数超限) - 可通过 `.checkpatch.conf` 文件配置自定义忽略规则 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值