参考:

Linux内核文档:《如何让你的改动进入内核》 - 广漠飘羽 - 博客园

提交内核补丁到Linux社区的步骤 - 广漠飘羽 - 博客园

建议:

内容具有时效性,需要阅读最新版本的同学,可以点击下面kernel的官方翻译网页:

https://www.kernel.org/doc/html/latest/translations/zh_CN/process/index.html

正文:

和一般github项目可以直接提交pr不同,linux kernel项目庞大,管理繁琐,如果我们想要对linux kernel提出改进,并希望最终改进能进入主分支,则需要严格按照提交patch的流程
 获取源码

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

或者对于有些模块,可能有专门的源码树,建议基于那个做。从以下maintainers文件中可以查到对应树和维护者的一些信息。

List of maintainers and how to submit kernel changes — The Linux Kernel documentation
commit&patch

做出修改,提交commit,并从该commit中生成patch。

git format-patch --subject-prefix='PATCH' -i HEAD~

然后,手动对patch再进行修改,要满足以下规则:patch官方规则

其中,--subject-prefix字段决定了 ' Subject: [PATCH v2 01/27] x86: fix eflags tracking ’ 加粗部分的内容。

然后,kernel提供了脚本对patch格式进行检查,执行scripts/checkpatch.pl file.patch
挑选收件人

同样方便地,kernel提供了一个脚本可以对某个文件提取出它的维护者,可以几种方法对照使用:

    scripts/get_maintainer.pl  file or dir 
    git blame file(可查到每行代码是谁提交的,查到commit id后再用git show id,就能看到这个人的具体提交信息,里面有邮箱)

git log --pretty-format:"格式化字符串" --graph(加一点图形化显示)也很有用,格式化字符串定义可以参照Git - 查看提交历史

除此之外,还要将邮件抄送给linux-kernel@vger.kernel.org、对应子系统@vger.kernel.org(同样在maintainers文件可查)、security@kernel.org(如果安全相关)
发送邮件

官方推荐用git send-email,这个工具使用smtp协议发送,需要进行一些配置。

首先需要去我们想用的邮箱设置里查到smtp的服务器地址、端口号、以及对应密码。然后打开.gitconfig:

[sendemail]

        smtpserver = serverUrl

        smtpserverport = serverPort

        smtpencryption = tls/ssl(注意小写)

        smtpuser = yourEmail@gmail.com

        smtppass = password

接下来,就可以用

git send-email --to 直发对象 --to ... --cc 抄送对象 --cc ... file.patch

来发送patch啦

最后,发送patch的记录可以在 All of lore.kernel.org 查到

如何为linux kernel贡献代码的更多相关文章

  1. 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

    Linux kernel  的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地 ...

  2. 拥抱开源,怎样关注Linux Kernel 邮件列表?

    现在开源如此火爆.以至于张口闭口不提到都仿佛不是搞IT 的.那么怎样拥抱开源?本文适合刚開始学习的人,如有大神至此,goto exit ! 一.怎样增加开源 以Linux 为例,这么一个成功的开源项目 ...

  3. Linux Kernel代码艺术——系统调用宏定义

    我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...

  4. Linux Kernel 代码艺术——编译时断言

    本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel” 系列文章中),一来通过内核 ...

  5. 如何为PHP贡献代码

    PHP在之前把源代码迁移到了git下管理, 同时也在github(https://github.com/php/php-src)上做了镜像, 这样一来, 就方便了更多的开发者为PHP来贡献代码. 今天 ...

  6. arm linux kernel 从入口到start_kernel 的代码分析

    参考资料: <ARM体系结构与编程> <嵌入式Linux应用开发完全手册> Linux_Memory_Address_Mapping http://www.chinaunix. ...

  7. Linux Kernel系列 - 黄牛X内核代码凝视

    Hanks.Wang - 专注于操作系统与移动安全研究.Linux-Kernel/SELinux/SEAndroid/TrustZone/Encription/MDM    Mail - byhank ...

  8. Linux kernel Vhost-net 和 Virtio-net代码详解

    场景 Host上运行qemu kvm虚拟机,其中虚拟机的网卡类型为virtio-net,而Host上virtio-net backend使用vhost-net 数据包进入虚拟机代码分析 首先看vhos ...

  9. Linux kernel的中断子系统之(七):GIC代码分析

    返回目录:<ARM-Linux中断系统>. 总结: 原文地址:<linux kernel的中断子系统之(七):GIC代码分析> 参考代码:http://elixir.free- ...

  10. Linux Kernel 代码艺术——编译时断言【转】

    转自:http://www.cnblogs.com/hazir/p/static_assert_macro.html 本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码 ...

随机推荐

  1. 002 jmeter入门级写脚本及参数化

    1.jmeter入门脚本 步骤分析:测试计划(项目名称)-线程组(业务流程)-http请求(接口名称)-察看结果树 编写脚本四要素:测试计划.至少有一个线程组.至少有一个取样器.必须要有监听器 测试计 ...

  2. 【java】MVC模式和三层架构

    MVC是一种分层开发的模式 M:Model,业务模型,处理业务,存储数据,获取数据.JavaBean对象 V:  View , 视图,界面展示,展示数据.JSP或HTML C: Controller, ...

  3. docker 安装 elasticsearch7.6.2 kibana7.6.2

    [root@abcdefg bin]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6896f6e3202c ...

  4. 浪潮QQ群成员提取器 V2022

    浪潮QQ群成员提取软件 V2021 最新升级版 使用扫描安全登录QQ,批量获取群列表,然后在读取指定群的群成员列表支持过滤群主.群管理员 支持按最后发言时间提取活跃用户 支持识别僵尸粉和过滤可以导出文 ...

  5. 4.git的指令应用

    1.stash 应用:   应用场景:在当前分支开发代码,开发到一半,代码没有提交,你想在当前分支的基础上切换到别的分支:或者创建新的分支,所以需要把当前开发的内容进行藏匿起来. 1.1藏匿指令:   ...

  6. Python 常见报错类型整理(一)

    很多初学者会遇到很多奇奇怪怪的报错信息,在这里,我为大家已经准备好一部分报错信息的分析以及解决办法. 一.TypeError:类型错误,对象用来表示值的类型非预期类型时发生的错误 错误例子: age= ...

  7. thirty-two(模型点击展示)react-three-fiber

    模型点击蒙版展示 点击展示目的(用户需要看见模型中更加多的内容信息) 使用技术 ThreeJs.React-three-fiber.React-three-drei.React.css 整体思路:   ...

  8. kubectl --v日志级别

    Kubectl 日志输出详细程度是通过 -v 或者 --v 来控制的,参数后跟了一个数字表示日志的级别.Kubernetes 通用的日志习惯和相关的日志级别在 这里 有相应的描述. 详细程度 描述-- ...

  9. python翻译(二)

    百度翻译,通过设置参数可可以实现翻译为指定语种 baidujs1.js var i = "320305.131321201" function n(r, o) { for (var ...

  10. Android MD5加密、RSA加密

    现在公司做金融项目,需要考虑安全加密方面的问题.感谢大牛同事(冯哥) ,给我很大的帮助. 考虑到安全优化,我们把秘钥.加密步骤放到native中.考虑用到的技术:(1 )jni,(2 )OpenSSL ...