900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > linux内核 patch 功能 如何向 Linux Kernel 提交 Patch

linux内核 patch 功能 如何向 Linux Kernel 提交 Patch

时间:2021-04-22 01:35:00

相关推荐

linux内核 patch 功能 如何向 Linux Kernel 提交 Patch

昨晚终于向内核上游提交了人生中第一个 Patch,今天早上起床迫不及待的看手机,发现维护者 Andrew Morton 在6点31分回复我了:The patch has been added to the -mm tree.顿时感到异常兴奋。虽然这个 Patch 没什么技术含量,但是至少这是我在看代码过程中自己发现的,终于体会到了进步的感觉。下面我把 Patch 提交的步骤记录一下,也供别人参考下。

Git Email 配置

为了确保发送的 Patch 格式不会出错,我们使用 Git 自身提供的命令git send-email。

安装git send-email

我用的 Fedora,安装命令为sudo dnf install git-email,其他系统请自行使用yum或apt。

配置git-email使用 Gmail 邮箱服务

我比较喜欢 Gmail,所以此处就让git-email使用 Gmail 提供的邮箱服务了,换句话说git-email只是 一个邮件发送客户端而已,真正的工作还需要 Gmail 来完成。

打开 Git 配置文件

vim ~/.gitconfig

文件末尾追加如下内容

[sendemail]

from=MyName

smtpserver=

smtpuser=my_email@

smtpencryption=tls

smtppass=my_gmail_password

chainreplyto=false

smtpserverport=587

修改代码树并生成 Patch

建立一个新的分支

这是为之后生成 Patch 提供方便,使用命令如下:

gitbranchdevelop

gitcheckoutdevelop

修改内核代码树

这一步修改什么就取决于你了。

提交修改

gitadd.

gitcommit-s-v

注意git commit命令会自动打开编辑器让你编辑 Commit 信息,-s参数可以自动在你的 Commit 信息下加上一行Signed-off-by: My Name ,-v参数会在你的 Commit 信息下方显示出你做的修改,确保你能再三检查自己的改动,这一个参数不是必须的,但是推荐这么做。

注意,Commit 信息的格式有严格限制,我就不废话了,直接上模板。

mm:fixsomeerror

WhyIdothesechangesandhowIdoit.

Signed-off-by:MyName

第一部分是 short description,以子系统名打头,比如 mm,注意分号后面加个空格,不知道子系统名的可以看看你修改的这个文件的修改历史,看看之前的开发者是怎么写的。这一部分需要使用一句简短的话描述你所做的修改,要让维护者一眼就看出这个 Patch 大概干了什么事。

第二部分是 the body of your patch,这一部分要详细的解释你为何要做这个修改,以及怎么做的,注意时态用现在时,语态用主动形式。

第三部分是之前的-s参数自动加上的,不用管。

必须要注意的是,这三部分之间都要有一个空行隔开。

如果commit之后还想修改 Commit 信息的话需要使用命令git commit --amend -v。

生成 Patch

既然修改已经提交,那么是时候生成 Patch 了。

gitformat-patchmaster

这条命令是以 master 分支为基准,检测你在当前 develop 分支所做的修改并生成 Patch 文件。

命令完成后,你就可以看到你的 Patch 文件了。

[haolee@haoleelinux]$ls*.patch

0001-mm-fix-some-error.patch

检查你的 Patch 格式

运行以下命令检查你的 Patch 格式有没有问题,要做到0 errors, 0 warnings。

./scripts/checkpatch.pl0001-mm-fix-some-error.patch

发送 Patch

既然 Patch 已经生成完毕,那么是时候发送给上游维护者了。

找出应该发给谁

运行以下命令找出你应该把 Patch 发给谁。

./scripts/get_maintainer.pl-finclude/linux/gfp.h

注意,include/linux/gfp.h这个文件名改成你所修改的文件。

在我这里,该命令输出如下:

AndrewMorton(commit_signer:7/8=88%)

MichalHocko(commit_signer:3/8=38%,authored:1/8=12%,added_lines:3/21=14%,removed_lines:10/33=30%)

VlastimilBabka(commit_signer:3/8=38%,authored:1/8=12%,added_lines:8/21=38%,removed_lines:6/33=18%)

AlexanderDuyck(commit_signer:3/8=38%,authored:3/8=38%,added_lines:6/21=29%,removed_lines:5/33=15%)

MelGorman(commit_signer:2/8=25%)

VladimirDavydov(authored:1/8=12%,removed_lines:9/33=27%)

MyName(authored:1/8=12%,added_lines:2/21=10%,removed_lines:2/33=6%)

linux-mm@(openlist:MEMORYMANAGEMENT)

linux-kernel@(openlist)

测试发送

对于像我这样的新手来说,最好在发送给上游维护者之前先拿自己邮箱做个测试,小心点总没坏处。

gitsend-email--tomy_qq@0001-mm-fix-some-error.patch

一切正常的话,你应该可以收到邮件了,检查下格式什么的是否和你预想的一样。

正式发送

gitsend-email--toakpm@linux-\

--ccalexander.h.duyck@\

--ccmhocko@--ccvbabka@suse.cz\

--ccmgorman@suse.de\

--ccl.stach@pengutronix.de\

--ccvdavydov.dev@\

--cclinux-mm@\

--cclinux-kernel@\

--ccmy_email@\

0001-mm-fix-some-error.patch

之后你的 Patch 就发送给上游维护者并抄送到对应的邮件列表了。

后续

静静的等待维护者的邮件通知吧,如果 Patch 并入上游分支的话会给你发邮件通知的,如果被打回的话也会告诉你哪里错了。等我以后提交个复杂点的补丁被打回之后再来写这部分。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。