当前位置: 首页 > news >正文

向内核社区提交补丁

一、背景

内核的版本一直以来一直在持续迭代,离不开众多开发者的贡献。有时候我们会根据项目要求基于现有的内核版本开发一些新的功能或者修复掉一些特定场下的问题,我们是可以将其提交给社区的。

一般提交社区有两个基本原则,一是提交的补丁解决的是一个共性问题,并非一个特定的需求,或者说是具有一定的普适性,因为内核版本是旨在运用于所有linux系统里的版本,提交的补丁也是旨在放在内核公共使用的大版本里。如果一个功能没有足够的普适性,那么就没必要合入进内核社区,自己项目里去维护就可以了。第二个基本原则,是提交的补丁要尽量与现有内核里的模块要有一定的相似性,如果一下子提交一个特别大的改动,甚至直接去掉了现有的一些机制,甚至把名字都换了个遍,那么这样的补丁是很难被合入的。

这篇博客会从下载代码到制作补丁再到提交补丁这一连串步骤进行介绍。假设是你已经有一些文件的改动可能想要提到社区。

二、下载代码

2.1 根据MAINTAINERS下载对应的仓库

下载代码前,需要先根据已经下载下来的一份相对较新的版本里的代码里的第一级目录里的MAINTAINERS:

如上图,假设你改的是network子系统,找到MAINTAINERS里对应的仓库,下载时就下对应的仓库即可。

2.2 参考子系统对应的开发指导文档,比如net的maintainer-netdev.rst

有些子系统有专门的开发指导文档,比如net的maintainer-netdev.rst:

对于net而言,已发布的版本的问题的修复是下载下面这个版本:

git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git

对于新的特性需要下载下面这个版本:

git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git

下载代码时,由于网速不给力,可以通过制定--depth=1,如下命令:

git clone --depth=1 git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git

三、准备补丁

3.1 准备提交单个补丁

准备补丁的步骤,程序员基本都知道,要注意git add后敲:

git commit -s

自动加上签名。

git commit过后,使用git format-patch -1来生成一个patch:

git format-patch -1

上面的-1     1表示生成最近的一个提交

-2 表示生成最近的两个提交

上面的命令生成出.patch文件后,要记得修改主题,根据要求加上仓库名比如下图里的net-next(具体要不要带上仓库名需要自行参考他人的提交的补丁),和当前修改的版本号v11就是修改了11个版本了,0/2是对应于下面 3.2 里讲到的补丁系列而言的扉页补丁。

3.2 准备提交一个补丁系列

所谓提交一个补丁系列就是指一次最终合入,是合入了多笔补丁,这种现象在内核社区提交里,现在看是非常普遍的。

如下命令来制作:

git format --cover-letter -2

上面的命令里-2是git log里的最近两个补丁,形成一个补丁系列,--cover-letter会生成一个0/n的扉页补丁,会合并上后面的补丁里的所有的提交,形成一个下图里的合并后的改动描述:

3.3 有补丁之后,需要用内核版本里自带的scripts下的checkpatch.pl来检查补丁格式

./scripts/checkpatch.pl *.patch

四、准备一个邮箱,邮箱需要支持smtp服务

我是使用的163邮箱,我确认163是可以配置的

这是为的是可以通过git send-email来发送。

4.1 配置smtp

自行去寻找对应邮箱的smtp的方法

配置完后,有一个smtp的密码需要填到下图里的smtpPass里去:

4.2 git send-email发送前需要确定要发送的人和抄送的人

通过下面的命令来得知要发送的人和抄送的人:

./scripts/get_maintainer.pl *.patch

4.3 git send-email发送补丁

下图是我history显示出来的我之前发送补丁时的命令样子:

五、发送出来后,可以通过下面的链接进行查看,看到你刚发的补丁了

链接是:

https://lkml.org/

之前我发送的补丁的v0版本时的lkml.org看到的截图:


文章转载自:

http://zKxJ85CB.dtrzw.cn
http://fHyIF4Yu.dtrzw.cn
http://cp01tV0d.dtrzw.cn
http://WjVxeif4.dtrzw.cn
http://lADGTlpK.dtrzw.cn
http://ks1U6AR4.dtrzw.cn
http://6R6b5vdu.dtrzw.cn
http://Q0D741uz.dtrzw.cn
http://EFcyXqGl.dtrzw.cn
http://FT71vKW3.dtrzw.cn
http://uLhVw8Pp.dtrzw.cn
http://rZkbGacP.dtrzw.cn
http://3oU4zj9Y.dtrzw.cn
http://NOiaBBhq.dtrzw.cn
http://zQc6MzQq.dtrzw.cn
http://KD6gmM4k.dtrzw.cn
http://l9wP0fRO.dtrzw.cn
http://pqQgWu5A.dtrzw.cn
http://pSB9iYOk.dtrzw.cn
http://iuM6s1Q5.dtrzw.cn
http://IKFtvBte.dtrzw.cn
http://THQvF2HF.dtrzw.cn
http://NAj2kNe7.dtrzw.cn
http://FvX9OHVr.dtrzw.cn
http://1kDe1Cih.dtrzw.cn
http://AvDjSL51.dtrzw.cn
http://LG6jCI90.dtrzw.cn
http://3syxXzD7.dtrzw.cn
http://iCfBqXQp.dtrzw.cn
http://FfpUTLdF.dtrzw.cn
http://www.dtcms.com/a/386860.html

相关文章:

  • 【Java-常用类】
  • 在线教程丨ACL机器翻译大赛30个语种摘冠,腾讯Hunyuan-MT-7B支持33种语言翻译
  • 006 Rust基本数据类型
  • docker配置代理加速
  • 基于MATLAB的视频动态目标跟踪检测实现方案
  • AirPods Pro 3正式发布:全方位升级​
  • PyTorch生成式人工智能(29)——基于Transformer生成音乐
  • 《如龙8外传》共五章:漂流记、老人与海、金银岛等!
  • NVIDIA DOCA与BlueField DPU理解与学习
  • 蜜罐--攻防、护网的强大助力
  • OpenStack 学习笔记
  • 2025年09月16日Github流行趋势
  • git永久存储凭证(可以不用经常输入git密钥)
  • 豆包对高可用系统建设的理解
  • nginx.org 官方仓库安装与配置 NGINX
  • 数据驱动的核心基石:概率分布全家桶的技术实践与方法论思考
  • 贪心算法应用:抗干扰信道分配问题详解
  • 深度搜索 DeepSearch GLM-4.5-flash 实现
  • 基础分割模型U-Net
  • LeetCode:8.无重复字符的最长字串
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解一)
  • 实验四 Cache 3种不同的地址映射机制(仿真)
  • 北航计算机保研机试题+解答
  • Python Flask快速入门
  • AirPodsDesktop,一个AirPods 桌面助手
  • Java 调用 C++ 动态库(DLL)完整实践:有图像有实体处理场景
  • 教育行业智慧文档平台:构建安全合规、高效协同的教学研究与资源共享解决方案
  • 网编day7(网络词典)(部分)
  • CodeBuddy AI 深度体验:模型怎么选不踩坑?
  • MQ高级.