设为首页 收藏本站
查看: 1136|回复: 0

[经验分享] 使用git send-mail提交Linux内核补丁

[复制链接]

尚未签到

发表于 2015-12-10 13:31:52 | 显示全部楼层 |阅读模式
本文是在Ubunt 12.04环境下测试的。

1、安装必要的软件



  • # apt-get install git git-core git-email

2、配置send-email的环境,主要是设置本地email的客户端,用msmtp

vim ~/.msmtprc




  • # default
  • account gmail
  • protocol smtp
  • host smtp.gmail.com
  • from user@example.com
  • user user@example.com
  • password ******
  • port 587
  • auth on
  • tls on
  • tls_trust_file /etc/ssl/certs/ca-certificates.crt
  • syslog LOG_MAIL

  • # set a default account
  • account default : gmail

3、设置git send-email的配置
vim ~/.gitconfig




  • [user]
  •     name = your name
  •     email = user@example.com

  • [sendemail]
  •         smtpencryption = tls
  •         smtpuser = user@example.com
  •         smtpserverport = 587
  •         smtpserver = smtp.gmail.com
  • # to = user@example.com
  • # cc = user@example.com
  • # from = user@example.com
        其中,上面配置文件的最后三行在git send-email发送补丁文件时也可以通过命令行指定。建议大家最好通过命令行指定,因为内核补丁文件需要发送给相关模块的maintainer。

4、下面就以实例来说明如果制作一个符合规范的内核补丁。
Linux内核补丁的制作规范和发送格式参见内核文档Documentation/SubmittingPatches。
a、修改内核




  • diff --git a/net/sunrpc/auth_null.c b/net/sunrpc/auth_null.c
  • index a5c36c0..f8e0d73 100644
  • --- a/net/sunrpc/auth_null.c
  • +++ b/net/sunrpc/auth_null.c
  • @@ -27,6 +27,7 @@ nul_create(struct rpc_clnt *clnt, rpc_authflavor_t flavor)
  • static void
  • nul_destroy(struct rpc_auth *auth)
  • {
  • + pr_info("hellor world!\n");
  • }

b、提交修改




  • git commit -a -s -m"test" -e

其中,-a表示all,-s表示在补丁文件头部增加Signed-off-by行,-m表示指定commit信息,-e表示使用git默认的编辑器来对commit信息进一步编辑,我这里默认的编辑器是nano。关于更详细的参数选项可以用命令git commit -h来察看。

执行上面那个命令以后,会进入到nano编辑器中,然后进行编辑。其中第一行显示的是补丁文件头部的Subject信息,第二行文字显示的是补丁文件的注释信息。编辑完以后,ctrl-o保存,ctrl-x退出。  
DSC0000.png

c、生成补丁文件



  • git format-patch -1

其中,-1表示生成一个补丁文件,即最后git commit时的修改。用vim打开补丁文件,如下所示:
DSC0001.png

之所以要有Subject,Signed-off-by文件,那是因为内核文档Documentation/SubmittingPatches文件中有说明:

15) The canonical patch format

The canonical patch subject line is:

    Subject: [PATCH 001/123] subsystem: summary phrase

The canonical patch message body contains the following:

- A "from" line specifying the patch author.

- An empty line.

- The body of the explanation, which will be copied to the
    permanent changelog to describe this patch.

- The "Signed-off-by:" lines, described above, which will
    also go in the changelog.

- A marker line containing simply "---".

- Any additional comments not suitable for the changelog.

- The actual patch (diff output).

d、检测补丁
制作完补丁文件以后,不要急着把补丁文件mail出去,需要先检测一下这个补丁的正确性。内核中提供了一个补丁检测脚本。在内核源代码根目录下,补丁检测如下:



  • # ./scripts/checkpatch.pl 0001-nfs-add-a-pr_info.patch
  • total: 0 errors, 0 warnings, 7 lines checked

  • 0001-nfs-add-a-pr_info.patch has no obvious style problems and is ready for submission.
e、确定补丁发送给谁
补丁检测通过以后,就可以mail出去了。但是该mail给谁呢?嗯,内核里面也同样提供了一个脚本,用于检测某个目录的maintainer是谁。以我修改的net/sunrpc目录里面的文件为例,执行下面的命令:




  • root@bandari-PC:~/code/linux-3.5.4# ./scripts/get_maintainer.pl net/sunrpc/ -f
  • Trond Myklebust (maintainer:NFS, SUNRPC, AND...)
  • "J. Bruce Fields" (supporter:KERNEL NFSD, SUNR...)
  • "David S. Miller" (maintainer:NETWORKING [GENERAL])
  • linux-nfs@vger.kernel.org (open list:NFS, SUNRPC, AND...)
  • netdev@vger.kernel.org (open list:NETWORKING [GENERAL])
  • linux-kernel@vger.kernel.org (open list)
从上面输出可以看到,email destination有三个人。而后面的3个则用于email carbon copy (cc),即抄送。

5、发送补丁
命令如下所示:



  • root@bandari-PC:~# git send-email --smtp-server /usr/bin/msmtp --to user@example.com
  • --cc user@example.com 0001-nfs-add-a-pr_info.patch
其中,git send-email的选项选项说明如下:
--to 邮件的To地址 sendmail.to
--cc 邮件的Cc地址 sendmail.cc
--smtp-server SMTP服务器名称 sendmail.smtp-server

关于git send-email的详细选项说明,可以通过执行命令git send-email -h察看。
注意,这里是通过命令行参数设置,前面说过,在~/.msmtprc文件也可以设置全局参数。
如果大家要测试的话,可以将--to和--cc设置成自己的邮箱地址。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-149258-1-1.html 上篇帖子: [linux,git]在 linux 下面使用 github(3) 下篇帖子: RedHat Linux配置Git Server
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表