如何往 Linux 内核社区提交代码

2018年12月1日 799 次阅读 0 条评论 5 人点赞

总有这样一群人,不计报酬不辞辛苦的为这个世界的美好添砖加瓦,在这一类人中的某一些人,他们开创了许多伟大的开源工程,这些工程也许会随着年代的久远逐渐被替代,但仍然有一些随着时光流逝变得愈发强大,这其中就包括了 Linux 内核工程。还有一群怀揣着梦想的人,总是提醒自己不断的变得强大,变得专业,所以依托于这些优秀的工程开始自己的探索之路,这其中刚好就包括你我。

不论你的 Java 写得多么的溜,C 语言技巧多么的花哨,当你决定加入这一场没有硝烟的与自己的战争,一切都会从 0 开始,那么我,教你如何开始。

编写优秀的代码只是开始

有时候你发现了一个 BUG,刚好这也是你的专业能够力所能及,那么请修复好他。这时候你需要用到一个同样伟大的工具 git,人和动物最大的区别就是人会使用工具,请用好它,并把他当做你的人生道路的阶梯。

当你 Fix 一个 BUG,现在开始需要制作一个 git 提交,在此之前首先准备好你的工具,好好打磨:

[root@localhost ~]# cat ~/.gitconfig
[user]
    email = liuyun01@kylinos.cn
    name = Jackie Liu

设置好你的姓名与邮箱,务必确保你的邮箱无误且是你常用邮箱,无论是什么工程都会通过邮件作为主要沟通方式。现在已经准备好了自己的信息,当你再次使用工具 git 时,他会知道你是谁,然后通过它再告诉世界你是谁。这很重要。

[root@localhost linux-stable]# git add Makefile && git commit -sm "update Makefile"

添加并 commit 这个信息到本地,Congratulation!你的 Patch 已经完成了本地提交,长征开始了。

补丁提取

补丁提交已经完成,要提交给上游可不是随便就可以,你我并没有权限可以直接 Push 到顶级源码树,需要你把它提取出来再邮件发送给子系统维护者,他们会替你提交给顶级源码树。有必要更多的强调一些流程,很多时候代码并不可能一次性就会被接纳,不要灰心,根据维护者的建议再修改一次,此时需要对你提取的补丁生成一个 Version,我来教你怎么做。

[root@localhost linux-stable]# git format-patch -3 -v2 --cover-letter -o patchs

简单解释一下,-3 代表需要生成 3 个当前的分支 HEAD 位置往下的补丁,-v2 代表这已经是第二次生成补丁了,需要注意这并不是你个人第二次提取补丁的意思,而是你前一次已经通过邮件发送到了邮件列表之后,被维护者提供建议之后的再一次修改提取补丁,这样提取的补丁会有 [PATCH v2] 的字样开头,以此类推,有时候遇到重大修改可能需要上十次。--cover-letter 就是的作用就是有时候你需要提交一系列的补丁,那么最好有个总结的文字再前面,而这个参数会生成一个 v1-0000-cover-letter.patch 的补丁,需要你自己修改名字以及它里面的内容,你需要尽可能的详细,让维护者正确理解你的代码所要表达的意思。-o patchs 就是将补丁全部出去到 patchs 目录,这样容易归纳处理。

保持好的代码格式

无规矩不成方圆,好的代码格式才会让审查者帮助你审查代码,他们都是子系统的 Maintainer,需要极高的水平且维护各子功能模块,没有统一的且优秀的代码格式是无法完成一个优秀系统的设计,正如 Linux 内核,据统计每年高达千人的对其进行修改,如果不统一代码格式,寸步难行。拿到刚刚提取的补丁,修改 cover-letter 这个补丁的信息,现在开始检查代码格式:

[root@localhost linux-stable]# ./script/cleanpatch 0001-update-makefile.patch

这个命令会完成一个基本的检查和修复,比如空格和 TAB 的一个替换等等(Linux 社区使用 TAB 缩进),完成这一部分基本操作之后,再开始正式的代码检查:

[root@localhost linux-stable]# ./scripts/checkpatch.pl v1-0036-hisi-pci-hisi-add-fix_hisi_hp_device-check.patch
ERROR: do not initialise globals to NULL
#25: FILE: drivers/pci/quirks.c:336:
+fix_hisi_fn fix_hisi_hp_device = NULL;

total: 1 errors, 0 warnings, 17 lines checked

v1-0036-hisi-pci-hisi-add-fix_hisi_hp_device-check.patch has style problems, please review.

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

你会看到很多类似的信息,你需要一行行的修复,一个 Error 都不允许存在,最好就是连 Warnning 也不要有。

发送吧

当你准备好这一切关于源码的部分,那么现在就将他发给维护者吧,提交前请三思,是不是都准备好了,而且是不是代码不存在明显的问题?如果可以,开始吧:

[root@localhost linux-stable]# cat  ~/.gitconfig
[sendemail]
    smtpencryption = ssl
    smtpuser = liuyun01@kylinos.cn
    smtpserverport = 465
    smtpserver = smtp.exmail.qq.com
    smtppass = xxxxxx

[user]
    name = Jackie Liu
    email = liuyun01@kylinos.cn

添加上你的邮箱 SMTP,通过自己邮箱来发送这些补丁是有必要的,当你设置好邮箱并自我测试通过之后。开始执行最后的发送命令。

[root@localhost linux-stable]# git send-email --to xxx.kernel.org -cc xxx.vger.kernel.org patchs

--to 就是主要的 Maintainer 的邮箱,--cc 就是邮件列表,至于谁是这个子系统的 Maintainer,可以通过一个脚本来获取,邮件列表是什么的话,来这里查找内核邮件列表的 List吧:

[root@localhost linux-stable]# ./scripts/get_maintainer.pl Makefile -f

其实就是通过 get_maintainer.pl 加目录名或者文件名来查找维护者或者邮件列表,很简单。

标签:
最后编辑:2018年12月17日

文章评论(0)