提交你的第一个 Linux 内核补丁的检查清单

了解如何做出你的第一个内核贡献,以及在开始之前你应该知道什么。
214 位读者喜欢这个。
How Linux became my job

Opensource.com

Linux 内核是最大且发展最快的开源项目之一,由大约 53,600 个文件和近 2000 万行代码组成。全球有超过 15,600 名程序员为该项目做出贡献,Linux 内核遵循维护者模型进行协作。

maintainer model

在本文中,我将提供一个快速检查清单,列出进行你的第一个内核贡献所涉及的步骤,并查看在提交补丁之前你应该知道什么。有关提交你的第一个补丁的更深入的提交过程,请阅读 KernelNewbies 第一个内核补丁教程

为内核做贡献

步骤 1:准备你的系统。

本文中的步骤假设你的系统上安装了以下工具

步骤 2:下载 Linux 内核代码仓库:

git clone -b staging-testing 
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git

复制你当前的配置:

cp /boot/config-`uname -r`* .config

步骤 3:构建/安装你的内核。

make -jX 
sudo make modules_install install

步骤 4:创建分支并切换到它。

git checkout -b first-patch

步骤 5:更新你的内核以指向最新的代码库。

git fetch origin
git rebase origin/staging-testing

步骤 6:修改代码库。

使用 make 命令重新编译以确保你的更改不会产生错误。

步骤 7:提交你的更改并创建一个补丁。

git add <file>
git commit -s -v
git format-patch -o /tmp/ HEAD^

structure of a typical linux kernel patch

主题由以冒号分隔的文件名路径组成,后跟补丁以祈使语气所做的操作。在空行之后是补丁的描述和强制性的 Signed-off-by 标签,最后是你的补丁的 diff。

这是另一个简单补丁的例子

simple patch example

接下来,从命令行使用电子邮件发送补丁(在本例中,使用 Mutt):

mutt -H /tmp/0001-<whatever your filename is>

要了解要将补丁发送给哪些维护者的列表,请使用 get_maintainer.pl 脚本

在提交你的第一个补丁之前需要知道什么

  • Greg Kroah-Hartman暂存树 是提交你的 第一个补丁 的好地方,因为他接受来自新贡献者的简单补丁。当您熟悉补丁发送过程后,您可以发送复杂度更高的子系统特定补丁。
  • 您也可以从纠正代码中的编码风格问题开始。要了解更多信息,请阅读 Linux 内核编码风格文档
  • 脚本 checkpatch.pl 会检测您的编码风格错误。例如,运行
    perl scripts/checkpatch.pl -f drivers/staging/android/* | less
  • 您可以完成开发人员留下的未完成的 TODO
    find drivers/staging -name TODO 
  • Coccinelle 是一个用于模式匹配的有用工具。
  • 阅读 内核邮件列表存档
  • 浏览 linux.git 日志,查看以前作者的提交以获取灵感。
  • 注意:不要顶端回复与您的补丁的审阅者交流!这是一个例子

    错误的方式

    Chris,

    好的,我们明天在二楼安排会议吧。

    > 2013 年 4 月 26 日星期五上午 9:25,Chris 写道:

    > 嗨 John,我有一些问题

    > 1. 你想明天安排会议吗?

    > 2. 在办公室的哪一层?

    > 3. 什么时间对你合适?

    (请注意,最后一个问题在回复中被无意中遗漏了。)

    正确的方式

    Chris,

    请看我在下面给出的答案...

    > 2013 年 4 月 26 日星期五上午 9:25,Chris 写道:

    > 嗨 John,我有一些问题

    > 1. 你想明天安排会议吗?

    好的,明天可以。

    > 2. 在办公室的哪一层?

    我们就在二楼吧。

    > 3. 什么时间对你合适?

    上午 09:00 可以。

    (所有问题都已回答,这种方式节省了阅读时间。)

  • Eudyptula 挑战 是学习内核基础知识的好方法。

要了解更多信息,请阅读 KernelNewbies 第一个内核补丁教程。之后,如果您仍有任何疑问,请在 kernelnewbies 邮件列表#kernelnewbies IRC 频道 中提问。

标签
User profile image.
我是一名来自孟买的计算机科学工程师,也是通过 Outreachy 项目的前 Linux 内核实习生。我曾为 Greg Kroah Hartman 的内核树做出贡献,并在 2017 年欧洲开源峰会和 2018 年东京开源峰会上发表演讲,很快还将在 2018 年欧洲开源峰会上发表演讲。

3 条评论

感谢这篇文章。它对新手很有帮助,并且主要关于如何设置 git。我很希望你能再写一篇,重点介绍一个实际修补东西的例子。

无论如何,这是一个很好的介绍,谢谢

嗨,谢谢这篇文章。

但是,不建议使用反引号进行命令替换,所以代替

cp /boot/config-`uname -r`* .config

你应该这样做

cp /boot/config-$(uname -r)* .config

或者更好的是

cp /boot/config-"$(uname -r)"* .config

请参阅此页面以获取更多信息: https://mywiki.wooledge.org/BashFAQ/082

如果我没记错的话,git 可以自己完成电子邮件提交(只需稍作配置)。

https://git-scm.cn/docs/git-send-email

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.