参考:

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. Python 安装使用cx_Oracle操作Oracle数据库

    cx_Oracle 是一个能够访问 Oracle 数据库的 Python 扩展模块.它符合 Python 数据库 API 2.0 规范,并增加了相当多的内容和几个排除项.Python 连接使用Orac ...

  2. JUC续

    设计模式,保护性暂停.解耦 生产者消费者模式 park.unpark 线程状态转换 锁超时 锁超时可以解决哲学家就餐问题 公平锁 条件变量 线程控制顺序

  3. SQL_TIP_JOIN_x

    没有条件的JOIN会导致数据数量变为两表的数据量的乘积结果. 用ON来在这些结果里进行筛选 on T1.A = T2.A的时候,如果T1的A是不重复的,则实际上是在对T2现有数据做筛选,结果数据量&l ...

  4. Laravel 5.1 LTS 速查表

    https://cs.laravel-china.org/# Artisan // 在版本 5.1.11 新添加,见 http://d.laravel-china.org/docs/5.1/autho ...

  5. 【Java学习Day07】标识符

    标识符 Java使用的组成部分的需要名字.类名.变量名以及方法名都被称为标识符 标识符的注意点 所有的标识符都应该以字母(A-Z或者a-z),美元符($).或者下划线(_)开始 首字符之后可以是字母( ...

  6. Git客户端部署使用-生成ssh密钥2

    1. 设置用户名 其中双引号中的 XXX 是用户名,记得替换成自己的用户名,需要注意的是这里的用户名是git服务器所使用的名称,一般公司用的都是员工名称的全拼. # 在git窗口中输入命令行: git ...

  7. Oracle学习undo之IMU机制

    1.传统undo块 在传统情况下Oracle对待undo表空间和普通表空间是一视同仁的,一个事务开始的时候,在相对空闲的undo回滚段的段头块的事务表获取一个槽位,把事务信息写上,有可能: 1.1.段 ...

  8. JS实现打字效果(_会闪烁)

    背景 更新博客园个人博客时,突发奇想想要将子标题的入场特效做成类似Linux命令行输命令时的样式 效果网页:LanceEst - 博客园 (cnblogs.com) 思路和代码 1 <h2 id ...

  9. NC16644【字符串的展开】

    正确代码: #include <iostream>#include <algorithm>using namespace std;bool IsSame(char a, cha ...

  10. padding&margin

    margin是盒子的外边距,即盒子与盒子之间的距离,而padding是内边距,是盒子的边与盒子内部元素的距离. 鞋盒里面的鞋到 盒子的距离设置为 padding ,而 鞋盒到鞋架的距离设置为margi ...