• 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

    【作者】张昺华
    【大饼教你学系列】https://edu.csdn.net/course/detail/10393
    【新浪微博】 张昺华--sky
    【twitter】 @sky2030_
    【微信公众号】 张昺华
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    Spring中的资源加载
    分布式系统Paxos算法
    MySQL中MyISAM与InnoDB区别及选择(转)
    Unable to construct api.Node object for kubelet: can't get ip address of node master.example.com: lookup master.example.com on : no such host
    分库情况下的数据库连接注入
    Core源码(二) Linq的Distinct扩展
    B-Tree详解
    C#进阶之路(八)集合的应用
    重温CLR(十八) 运行时序列化
    重温CLR(十七)程序集加载和反射
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13353909.html
Copyright © 2020-2023  润新知