昨晚终于向内核上游提交了人生中第一个 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 来完成。

  1. 打开 Git 配置文件

    vim ~/.gitconfig

  2. 文件末尾追加如下内容

    [sendemail]
    from = My Name <my_email@gmail.com>
    smtpserver = smtp.gmail.com
    smtpuser = my_email@gmail.com
    smtpencryption = tls
    smtppass = my_gmail_password
    chainreplyto = false
    smtpserverport = 587

修改代码树并生成 Patch

建立一个新的分支

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

 git branch developgit checkout develop

修改内核代码树

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

提交修改

git add .
git commit -s -v

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

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

mm: fix some errorsWhy I do these changes and how I do it.Signed-off-by: My Name <my_email@gmail.com>
  1. 第一部分是 short description,以子系统名打头,比如 mm,注意分号后面加个空格,不知道子系统名的可以看看你修改的这个文件的修改历史,看看之前的开发者是怎么写的。这一部分需要使用一句简短的话描述你所做的修改,要让维护者一眼就看出这个 Patch 大概干了什么事。

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

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

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

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

生成 Patch

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

git format-patch master

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

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

[haolee@haolee linux]$ ls *.patch
0001-mm-fix-some-errors.patch

检查你的 Patch 格式

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

./scripts/checkpatch.pl 0001-mm-fix-some-errors.patch

发送 Patch

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

找出应该发给谁

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

./scripts/get_maintainer.pl -f include/linux/gfp.h

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

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

Andrew Morton <akpm@linux-foundation.org> (commit_signer:7/8=88%)
Michal Hocko <mhocko@suse.com> (commit_signer:3/8=38%,authored:1/8=12%,added_lines:3/21=14%,removed_lines:10/33=30%)
Vlastimil Babka <vbabka@suse.cz> (commit_signer:3/8=38%,authored:1/8=12%,added_lines:8/21=38%,removed_lines:6/33=18%)
Alexander Duyck <alexander.h.duyck@intel.com> (commit_signer:3/8=38%,authored:3/8=38%,added_lines:6/21=29%,removed_lines:5/33=15%)
Mel Gorman <mgorman@suse.de> (commit_signer:2/8=25%)
Vladimir Davydov <vdavydov.dev@gmail.com> (authored:1/8=12%,removed_lines:9/33=27%)
My Name <my_email@gmail.com> (authored:1/8=12%,added_lines:2/21=10%,removed_lines:2/33=6%)
linux-mm@kvack.org (open list:MEMORY MANAGEMENT)
linux-kernel@vger.kernel.org (open list)

测试发送

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

git send-email --to my_qq@qq.com 0001-mm-fix-some-errors.patch

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

正式发送

git send-email --to akpm@linux-foundation.org \
--cc alexander.h.duyck@intel.com \
--cc mhocko@suse.com --cc vbabka@suse.cz \
--cc mgorman@suse.de \
--cc l.stach@pengutronix.de \
--cc vdavydov.dev@gmail.com \
--cc linux-mm@kvack.org \
--cc linux-kernel@vger.kernel.org \
--cc my_email@gmail.com \
0001-mm-fix-some-errors.patch

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

后续

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

转载于:https://blog.51cto.com/mirage1993/1912785

如何向 Linux Kernel 提交 Patch相关推荐

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

    昨晚终于向内核上游提交了人生中第一个 Patch,今天早上起床迫不及待的看手机,发现维护者 Andrew Morton 在6点31分回复我了:The patch has been added to t ...

  2. HOWTO: Create and submit your first Linux kernel patch using GIT

    这个文章用自己第一次提交patch的经历详细介绍了用git提交patch的步骤,值得学习. From : http://linux.koolsolutions.com/2011/02/26/howto ...

  3. Create and submit your first Linux kernel patch using GIT

    参考资料: How to Participate in the Linux Community http://www.linuxfoundation.org/content/how-participa ...

  4. linux kernel patch 使用说明

    内核补丁不是一定需要的,这要看你选择的是怎样的Linux内核,比如下载下来标准的Linux内核,想要编译linux系统在x86的PC机上运行,就根本不用什么板间支持的补丁了,因为标准Linux内核本身 ...

  5. [转]HOWTO do Linux kernel development - take 3 (中文版)

    打好linux基础,不断的跟随这篇文章中的建议,适应linux kernel开发的流程.虽然需要很久甚至几年的时间,但我相信坚持就会前进!加油! HOWTO do Linux kernel devel ...

  6. Linux Kernel 5.8 发布,华为内核代码贡献全球持续领先

    近日, Linux Kernel 5.8 版本正式发布,Linus 表示 Linux Kernel 5.8 是"有史以来最大的发行版之一".Linux Kernel 5.8 在 A ...

  7. linux下代码写错了怎么更改_谢宝友:手把手教你给Linux内核发patch

    本文简介 本文一步一步的演示如何生成一个简单Linux内核补丁,并提交给Linux社区.用以展示向社区提交补丁的步骤.本文英文名称:<Submit Patches Step by Step> ...

  8. linux 生成内核patch,谢宝友: 手把手教你给Linux内核发patch

    本文简介 本文一步一步的演示如何生成一个简单Linux内核补丁,并提交给Linux社区.用以展示向社区提交补丁的步骤.本文英文名称:<Submit Patches Step by Step> ...

  9. 如何为linux kernel贡献代码

    和一般github项目可以直接提交pr不同,linux kernel项目庞大,管理繁琐,如果我们想要对linux kernel提出改进,并希望最终改进能进入主分支,则需要严格按照提交patch的流程 ...

最新文章

  1. 关于一些运算((与运算)、|(或运算)、^(异或运算)........)的本质理解【转】...
  2. qt creator报错处理积累
  3. Ganglia的配置,用于监测系统和Hadoop性能
  4. 数据库设计--数据字典
  5. 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
  6. os.popen read()报编码错误_偶遇OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
  7. 四个程序员恋爱必学的聊天知识点!
  8. PHP 常见header 状态
  9. dgvHelper,xmlHelper,inputbox(仿vba),Evaluate(vba中函数应用于C#)
  10. 基于STM32的中文字库解码
  11. firebug下载地址
  12. [HAOI2009]毛毛虫(树的直径)
  13. Zookeeper的Paxos分布式一致性算法-类比
  14. PHP过滤昵称中emoji表情
  15. Python---统计《三国演义》中出现次数较高的人物
  16. 当谈论研发效能时,我们到底在谈什么?|大咖圆桌精华回顾
  17. 【CCNP | 网络模拟器GNS系列】安装、配置和使用 GNS3
  18. Spring5 Unsupported class解决方法:probably due to a new Java class file version that is supported yet
  19. iCloud Drive,简单实用的苹果原生云存储
  20. LibGdx练习-像素鸟(一)

热门文章

  1. 东风小康为什么是dfsk_重庆造乘用车首次乘坐专列出口欧洲 100辆东风风光ix5抵达德国...
  2. python 对角阵_numpy创建单位矩阵和对角矩阵的实例
  3. oracle 连接图示,ORACLE 表连接方法
  4. linux下mysql主从不同步
  5. android 大图 分块,android 大文件分割上传(分块上传)
  6. python函数和代码复用思维导图_Python语言程序---代码复用与函数递归(二)
  7. Java文档对象_java从文件读取对象
  8. php wordpress乱码,PHP問題:基于WordPress的CMS网站在文章摘要末尾出现乱码
  9. shell给python传变量_python和shell 传递变量
  10. python列表方法图解_python中list(列表)的使用方法总结(图文)