How to send patch to Linux upstream

Posted sky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了How to send patch to Linux upstream相关的知识,希望对你有一定的参考价值。

转自:https://blog.csdn.net/andyshrk/article/details/50864323

如何向Linux 内核提交补丁

     对于对Linux kernel有兴趣的开发者来说,很多人都希望自己的代码能够出现在Linux kernel的官方代码中。

       一般情况下 ,我们把Linux kernel的官方分之称为mainline,或者upstream。同时,我们把向Linux kernel提交或者贡献代码的过程也称为upstream。

      首先要了解Linux内核的开发模式,Linux kernel是分解成一个个子系统进行维护的,各个子系统,各个模块由不同的maintainer维护,当然每个maintainer有自己的代码仓库,这些代码仓库由git 进行管理。在开发的过程中,普通的开发者把自己的补丁或者提交给相应模块的maintainer,这些maintainer对代码进行审核,审核通过后会提交给上一级的maintainer,再由上一级的maintainer统一提交给大神Linus(所以,一般你的代码不是直接发给Linus本人)。maintainer向Linus统一提交是通过给Linus发Pull request邮件进行的,Linus如果对Pull Request包含的代码满意,就会合并到他的主线仓库,然后你的工作成果就会出现在下一个版本中了(Linux kernel大约两个月左右发布一个新版本)。当然,如果你的某个补丁很不合Linus的胃口,你就有可能受到严厉的批评或者嘲讽,这一般就看大神当时是什么心情了。

      由于Linux kernel是由散布在全球的开发者自由开发的,为了这个庞大的社区能够高效运转,所以它有自己特有的一套行为准则:

     (1)统一的编码风格,这个请仔细阅读Linux kernel中的文档       Documentation/CodingStyle

       不符合这个要求的代码是无法进入mainline的,并且一开始就有可能受到maintainer的批评。Linux kernel中提供了一个很好的脚本,可以用来对你的代码和补丁进行CodingStyle检测:scripts/checkpatch.pl

       另外建议仔细阅读的三个文档:Documentation/SubmitChecklist , Documentation/SubmittingDrivers,Documentation/SubmittingPatches

     (2)代码要具有通用性,因为Linux kernel的目标是要运行在各种各样的硬件平台上,所以进入Linux mainline的代码必须要具有通用性,而且能被高度复用,如果你的代码只能运行在特定平台的特定环境下,比如你提交了一个触摸屏驱动的代码,但是这个代码只能在你自己的mini2440开发板上运行,那你这个代码将很难被接受。

       提交出去的代码必须要在你所对应的maintainer的分支上要能编译过,所以一般情况下,你的代码要在你所对应的maintainer的分支上进行开发。比如linux-stable分支:

        git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

        我自己有很多补丁是针对手上的Rockchip开发板的(Rayeager, Popmetal),所以我的很多补丁要在Rockchip分支上开发,我就会把linux-rockchip加分支加到自己仓库中(Rockchip kernel 的maintainer是一个德国人),

        git remote add linux-rockchip git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git

        git fetch linux-rockchip

        然后你可以切到其中的一个分支上进行自己的修改。

        发送补丁是通过git send-email 命令发送的,需要注意的是send-email命令是独立于git 的,可能需要单独安装。

         在发送补丁之前,需要根据自己的邮箱配置smtp服务器,比如我自己的263企业邮箱, 配置如下:

               其中smtpserver smtpencryption smtpserverport 这三个选项需要根据自己的邮箱服务器去配置,这个一般查询相关的邮箱  客户端设置方法应该可以查到,比如下面就是我根据263企业邮箱查询到的相关信息。

             

                可以使用git format 命令生成补丁,也可以用其他的开源工具,我一般使用uboot中带的patman生成补丁:

                uboot可以通过如下命令下载:git clone git://git.denx.de/u-boot.git

                比如我基于linux-stable分支开发了如下补丁提交:

                

                 下面则通过如下命令生成这两个补丁:       

     可以看到该命令生成了001、002这两个补丁, 并且列出了和补丁对应的提交抄送邮件列表,一般在你发送补丁的时候,需要抄送给这些人。

      然后就可以发送补丁了:

    

    后面按照相关提示操作就可以了,发送成功后, 就耐心的等待相关高手的review吧。
————————————————
版权声明:本文为CSDN博主「Andyshrk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/andyshrk/article/details/50864323

以上是关于How to send patch to Linux upstream的主要内容,如果未能解决你的问题,请参考以下文章

How to Patch PetaLinux Modifying the kernel, drivers and standalone components

How to configure postfix to send email via Gmail

How to configure postfix to send email via Gmail

How to attach multiple files in the Send Mail Task in SSIS

How to resolve the 403 error when send POST request from Postman

[2016-2-15]OMG美语每日笔记-How do you send greetings and blessings to friend and family during difficul t