当前位置:   article > 正文

linux内核提交系列补丁,提交内核补丁到Linux社区的步骤

does maintainers need updating?

简介

向Linux社区提交补丁并不频繁,某一次提交后可能了然于胸,过段时间总会忘记,于是就有了这篇文章

这篇文章是我真实提交的步骤,没有严格按官方的要求和建议来,但能覆盖大多数问题

如果希望详细学习如何提交,参考《如何让你的改动进入内核》

下载代码

在官网下载最新代码,或者通过MAINTAINERS寻找对应子系统的仓库代码。

以我要提交pstore的子系统为例,在MAINTAINERS中找到以下信息:

PSTORE FILESYSTEM

M: Kees Cook

M: Anton Vorontsov

M: Colin Cross

M: Tony Luck

S: Maintained

T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/pstore

F: fs/pstore/

F: include/linux/pstore*

F: drivers/firmware/efi/efi-pstore.c

F: drivers/acpi/apei/erst.c

F: Documentation/admin-guide/ramoops.rst

F: Documentation/admin-guide/pstore-block.rst

F: Documentation/devicetree/bindings/reserved-memory/ramoops.txt

K: (pstore|ramoops|blkoops)

既然子系统有独立仓库分支,那就下载这个分支的代码,并切换到对应分支

git clone git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git pstore-tree

git checkout for-next/pstore

创建补丁

在下载的最新代码仓库中,本地提交自己的补丁后,就可以把补丁提取出文件来。

如果是单个补丁,用下面的命令:

git format-patch --subject-prefix='PATCH' -i HEAD~

如果是系列补丁,用下面的命令:

git format-patch --cover-letter --subject-prefix='PATCH' -N #这里的N是你要提取的补丁个数

上面两个命令比较通用了,其中

subject-prefix 是为邮件标题添加个前缀

cover-letter 是为系列邮件创建封面邮件

邮件前缀

一个邮件可有多个邮件前缀。有以下常见的邮件前缀,我的理解不确定是否准确,仅供参考

前缀

含义

PATCH

常规的且正式的补丁

RFC

不是要正式提上去的,希望一起讨论这个补丁,用来说明方向,看看意见

RESEND

邮件发过了但好几周都没人鸟,可能被遗忘了,重新发

如果根据maintainer的意见,修改后重新提交,则需要在前缀后面加上版本。

例如第5个版本:

git format-patch --subject-prefix='PATCH v5' -i HEAD~

提取出来的补丁,效果大概是这样:

[...]

Subject: [PATCH v5] ....

[...]

邮件封面

当有多个补丁来做某一件事情,我们需要提交系列补丁,那么最好有个邮件封面,介绍这系列补丁

那么,就会多出个0000编号的补丁:

0000-cover-letter.patch

0001-...

0002-...

在封面补丁里,就会列出了系列补丁包含哪些补丁?改了啥文件?如下:

[...]

Subject: [PATCH v5] *** SUBJECT HERE ***

*** BLURB HERE ***

WeiXiong Liao (1):

mtd: ...

drivers/mtd/Kconfig | 8 +

drivers/mtd/Makefile | 1 +

[...]

3 files changed, 540 insertions(+)

其中,封面补丁里面邮件头和正文需要自己写,可别冒失就这么发出去了

SUBJECT HERE : 封面邮件头,一句话总结系列邮件

BLURB HERE : 封面邮件正文,讲讲系列邮件是为了做什么

编译检查

编译进内核和编译成模块,都要试试,确保都能编译过

风格检查

Linux内核有提供脚本进行补丁的风格检查,执行下面命令:

$ ./scripts/checkpatch.pl 00*.patch

脚本爆出错误啦,改!在本地仓库改,然后提交到本地仓库,重新提出补丁,再次检查。只至没有报错为止。

错误都改!如果是警告,建议改,除非你觉得修改是合理的,可以忽略

还有一些是误报/建议,自己酌情看看是否要修,例如:

WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?

#71:

new file mode 100644

上面警告信息显示添加了新文件,需要我们确认新文件是否有在MAINTAINERS的记录中。实际上是有的,因为MAINTAINERS中文件是模糊匹配的,刚好囊括了我新添加的文件,因此可以忽略这警告。

kernel-doc注释规范检查

Linux系统上的kernel-doc机制,可以在源码中提取函数、结构体、枚举型、共同体等的说明。当然,要正确提取源码的注释就必须要符合一定的规范。

可以通过这样子检查是否符合规范:

$ ./scripts/kernel-doc -v -none

根据提示,修正warning和error即可。

确定邮件接受人

不知道把邮件发给谁?别怕,Linux内核牛叉到有提供脚本获取邮件接收人地址:

$ ./scripts/get_maintainer.pl 00*.patch

会比较慢,慢慢等,输出结果参考如下:

Kees Cook (maintainer:PSTORE FILESYSTEM)

Anton Vorontsov (maintainer:PSTORE FILESYSTEM)

Colin Cross (maintainer:PSTORE FILESYSTEM)

[...]

linux-doc@vger.kernel.org (open list:DOCUMENTATION)

linux-kernel@vger.kernel.org (open list)

linux-mtd@lists.infradead.org (open list:MEMORY TECHNOLOGY DEVICES (MTD))

因为我的是系列补丁,涉及多个子系统,所以获取到的邮件地址很多。

上面显示的地址中,很明显最后linux-开头的三行不是代码reviewer,类似于订阅转发地址的存在。把邮件发给这几个地址,就会转发给所有订阅了子系统的人。

发送邮件

我们用 git send-mail 发送邮件,简单,舒心

git send-mail --to --to .... --cc linux-XXXX@xxxx --cc ... 00*.patch

把上面获取的maintainer地址,用 --to 指定,订阅地址改用抄送 --cc

当然,在这之前,需要在git中配置你的sendmail信息

$ cat ~/.gitconfig

[...]

[sendemail]

smtpserver = ...

smtpserverport = 465

smtpencryption = ssl

smtpuser = ...

响应质疑与等待合并

如果有maintainer对你的补丁有疑惑,别担心,他们邮件提问,我们邮件回复。

邮件回复的细节不累述了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/804676
推荐阅读
相关标签
  

闽ICP备14008679号