How to send patch to Linux upstream

                                                                             如何向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企业邮箱, 配置如下:

How to send patch to Linux upstream_第1张图片

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

             

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

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

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

                 How to send patch to Linux upstream_第2张图片

                 下面则通过如下命令生成这两个补丁:        How to send patch to Linux upstream_第3张图片

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

      然后就可以发送补丁了:

    

    后面按照相关提示操作就可以了,发送成功后, 就耐心的等待相关高手的review吧。



你可能感兴趣的:(How to send patch to Linux upstream)