【42】如何向linux kernel主线提交patch

一、准备工作
1、读下面的文档,看看向kernel提交patch需要准备哪些
https://github.com/0xAX/linux-insides
linux kernel doc英文原版
https://www.kernel.org/doc/html/latest/index.html
linux kernel doc中文翻译
https://www.kernel.org/doc/html/latest/translations/zh_CN/index.html
如何让修改进入kernel
https://www.kernel.org/doc/html/v4.17/process/submitting-patches.html
如何让修改进入kernel中文
https://www.kernel.org/doc/html/latest/translations/zh_CN/process/submitting-patches.html
谢宝友: 手把手教你给Linux内核发patch
https://juejin.im/post/5daee99ee51d4524c902b44c
如何向 Linux 内核上游提交 Patch
https://blog.csdn.net/mirage1993/article/details/53957205
如何参与linux社区开发中文
http://ocselected.org/posts/contribute_to_community/how_to_participate_in_the_linux_community/
非常重要++++++++++++++++++++++++++++++++++++
如何向linux kernel提交patch的一个示例
https://www.linuxidc.com/Linux/2017-04/142492.htm

2、配置邮箱
(1)ubuntu下配置邮箱
https://blog.51cto.com/mirage1993/1912785
sudo apt-get install git-email
vim ~/.gitconfig
文件末尾追加如下内容

[sendemail]
        smtpServer = mail.xxx.cn
        smtpServerPort = 587
        smtpUser = [email protected]
        smtpEncryption = tls
~                              

在这里插入图片描述
(2)windows配置Davmail和Thunderbird
https://blog.csdn.net/csfreebird/article/details/7402935

http://davmail.sourceforge.net/download.htmldavmail getway下载地址
DavMail Gatway只需要修改URL,URL里面填写邮箱服务器地址,其他都是默认配置
在这里插入图片描述
thunderbird英文版下载地址
thunderbird 配置参考http://davmail.sourceforge.net/thunderbirdmailsetup.html
输入name、邮箱地址、password然后点continue
在这里插入图片描述
Incoming server type is POP, server hostname is localhost, default port is 1110, no SSL and normal password authentication. Outgoing server is localhost, default port is 1025, no SSL and normal password authentication. Set your username (windows account name or email address) and click Re-test to validate account settings, then Create Account:

设置incoming server type为POP3或者IMAP(建议选择IMAP,POP3会导致thunderbird邮箱和主邮箱不一样),注意server hostname要改成localhost,port可以手动输入默认值1110,SSL是None,authentication选择Noarmal password
outgoning server hostname要改成localhost,port可以手动输入默认值1025,SSL是None,authentication选择Noarmal password
在这里插入图片描述
thunderbird设置纯文本发送------非常重要
【Tools -> Account Settings -> [Account Name]-> Composition & Addressing -> Compose messages in HTML format】。
在这里插入图片描述
在这里插入图片描述
3、把默认的文本编辑器变成vim
Ubuntu模式的编辑器是nano,不过我更熟悉vim的快捷键,这样git commit时可以更方便操作
vim ~/.bashrc
在文件末尾主机下面内容

export EDITOR=/usr/bin/vim

在这里插入图片描述
4、ubuntu下安装mhonarc
sudo apt-get install mhonarc
mhonarc可以把eml格式的邮件转换成html的,这样可以查看发送给自己的patch是否符合要求。

5、订阅linux邮件组
http://vger.kernel.org/vger-lists.html
找到对应的邮件组,其中linux-kernel是必须的,点击subsribe,就会发邮件给[email protected]
安装提示回复邮件订阅就可以
在这里插入图片描述
在这里插入图片描述
订阅成功后,会受到succeeded的回复。
在这里插入图片描述

二、修改代码
1、clone torvalds主线代码(也可以clone各个维护者的分支)
参考https://www.kernel.org/doc/html/v4.17/process/submitting-drivers.html#submittingdrivers

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

2、创建一个开发分支,并在分支上修改代码
git checkout -b ntb_perf
注意:修改完毕代码可以用
./scripts/checkpatch.pl -f xx.c检查自己的代码的风格是不是满足linux的风格。
commit时使用git commit -s -v,如果 commit 之后还想修改 Commit 信息的话需要使用命令git commit --amend -v

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

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

mm: fix some errors

Why I do these changes and how I do it.

Signed-off-by: My Name <[email protected]>

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

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

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

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

如果 commit 之后还想修改 Commit 信息的话需要使用命令 git commit --amend -v。
在这里插入图片描述
在这里插入图片描述
三、制作patch并检查patch
git format-patch master
如果patch是已经发送给maintainer了,maintainer提了建议,你自己根据建议修改过代码,生产补丁时建议跟上 -v2 -v3
例如:
git format-patch -3 -v2 --cover-letter -o patchsdirectory

-3 代表从当前的分支 HEAD 位置往前3个提交处生成补丁。
-v2 代表这已经是第二次生成补丁了,需要注意这并不是你个人第二次提取补丁的意思,而是你前一次已经通过邮件发送到了邮件列表之后,被维护者提供建议之后的再一次修改提取补丁,这样提取的补丁会有 [PATCH v2] 的字样开头,以此类推,有时候遇到重大修改可能需要上十次。
–cover-letter 就是的作用就是有时候你需要提交一系列的补丁,那么最好有个总结的文字再前面,而这个参数会生成一个 v1-0000-cover-letter.patch 的补丁,需要你自己修改名字以及它里面的内容,你需要尽可能的详细,让维护者正确理解你的代码所要表达的意思。
-o directory就是将补丁全部出去到directory目录,这样容易归纳处理。
在这里插入图片描述
检查补丁:./scripts/checkpatch.pl xxx.patch

做到0 warning,0 error
注意:checkpatch.pl这个脚本有点问题,如果补丁是fix之前的错误的提交,补丁中需要包含错误提交的commit id(一般是哈希值前12位),这样这个补丁就要放到.git的同级目录,checkpatch.pl的脚本会误报Unkonwn commit id
在这里插入图片描述
同一个补丁放到.git统计目录就不会出问题。
在这里插入图片描述
在这里插入图片描述
四、把patch发给自己
git send-email --no-chain-reply-to --to=xx@自己的邮箱,yy@自己的邮箱 0001-NTB-ntb_perf-fix-address-err-in-perf_copy_chunk.patch
在这里插入图片描述
–no-chain-reply-to
如果已设置,每封电子邮件将作为对以前发送的电子邮件的回复发送。如果使用“–no-chain-reply-to”禁用,则首先发送的所有电子邮件将作为回复发送给第一封电子邮件。当使用这个时,建议给出的第一个文件是整个补丁系列的概述。默认情况下禁用,但sendemail.chainReplyTo可以使用配置变量启用它。

五、使用thunderbird 把mail保存为eml,使用mhonrac将eml格式的mail变成html的
在thunderbird 里面找到对用邮件,右键->另存为xxxx.eml

mhonarc -add [PATCH]\ NTB\ \ ntb_perf\ \ Fix\ address\ err\ in\ perf_copy_chunk.eml
在这里插入图片描述
六、使用浏览器查看threads.html是否要求。

七、检查修改的模块对应的维护者,并发邮件给
运行以下命令找出你应该把 Patch 发给谁。
./scripts/get_maintainer.pl -f xxx.c
一般会给出维护者,由于我改的ntb_perf.c没有给出维护者
只能去patch网页和lkml网页查看之前的邮件发送给谁了
https://lore.kernel.org/patchwork/project/lkml/list/
https://lore.kernel.org/lkml/
在这里插入图片描述
或者自己在查看MAINTAINERS文件
在这里插入图片描述
git send-email --no-chain-reply-to --to [email protected],[email protected],[email protected] --cc [email protected],[email protected] 0001-NTB-ntb_perf-Fix-address-err-in-perf_copy_chunk.patch

七、回复maintainer的各种问题
1、通过邮件查看
2、通过网页查看
http://lkml.iu.edu/hypermail/linux/kernel/
知道最新归档的然后选择author,然后ctrl+F找到自己的名字。
通过thunderbird 回复maintainer的各种问题,采用交叉回复interleaved post(inline replying)的方式回复邮件。
interleaved post方式见
https://en.wikipedia.org/wiki/Posting_style

post style翻译
使用 Thunderbird 检查邮件源码,确保:
– 邮件内容以纯文本格式编码
– 需有 References、In-Reply-To 等标签
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章