一、背景

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

一般提交社区有两个基本原则,一是提交的补丁解决的是一个共性问题,并非一个特定的需求,或者说是具有一定的普适性,因为内核版本是旨在运用于所有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://www.pswp.cn/diannao/100451.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/100451.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/100451.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TENGJUN-USB TYPE-C 24PIN测插双贴连接器(H14.3,4脚插板带柱):USB4.0高速传输时代的精密连接方案解析

在高速数据传输与多设备互联需求日益增长的当下,USB TYPE-C接口凭借其可逆插拔、高兼容性的优势成为主流,而TENGJUN推出的USB TYPE-C 24PIN测插双贴连接器(规格:H14.3,4脚插板带柱) ,以对USB4.0…

企业级 Docker 应用:部署、仓库与安全加固

1 Docker简介及部署方法 1.1 Docker简介 Docker之父Solomon Hykes:Docker就好比传统的货运集装箱 Note 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发1.1.1 什么是do…

rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中

同一项目下多个可执行文件,多个子项目参照以下: 一、项目目录 项目/|-- client/|-- main.rs|-- Cargo.toml|-- server/|-- main.rs|-- Cargo.toml|-- Cargo.toml二、项目公共 Cargo.toml [workspace] # 定义Rust工作区配置 members …

mac本地安装mysql

本人环境 macOs 14.5 1.下载安装mysql https://dev.mysql.com/downloads/mysql/ 配置环境变量,打开terminal vim ~/.bash_profile 添加MYSQL_HOME/usr/local/mysql 在PATH中添加 通过mysql --version命令查看版本 2.开启mysql 打开终端teminal,输入命令 sudo…

面试前端遇到的问题

面试官让我写一个delay函数然后这是我写的代码async function delay(){setTimeout(function() {}, 3000); }面试官就和我说不是这个,用promise当时就蒙了,什么东西,为什么要用promise然后问豆包说Promise 是 JavaScript 中用于处理异步操作的…

Ubuntu Desktop 22.04.5 LTS 使用默认的 VNC 远程桌面

1. 打开 VNC 打开设置 - 分享 - 远程桌面2. 配置 VNC 打开远程桌面 启用vnc 选择vnc密码访问 配置密码3. 固定密码 远程桌面的访问密码在每次开机后会刷新一次,可以通过以下方式固定 打开【应用程序】-【附件】-密码和加密密钥(或…

【无线安全实验4】基于伪随机数的WPS PIN码逆向(精灵尘埃/仙尘攻击)

文章目录1 原理分析1.1 WPS连接过程1.1.1 初始阶段1.1.2 注册阶段1.2 WPS攻击原理1.2.1 在线攻击1.2.2 离线攻击1.2.2.1 Ralink模式1.2.2.2 eCos模式2 实验过程3 参考资料在2011年 Stefan Viehbck 演示过WPS的在线暴力攻击,由于PIN码猜测最多只需11000种组合&#x…

IDEA开发过程中经常使用到的快捷键

IntelliJ IDEA 开发 Java 时常用的快捷键列表 代码编辑与行操作快捷键功能描述Ctrl Y删除当前行。Ctrl D复制当前行到下一行。Shift Alt ↑将当前行(或选中块)向上移动。Shift Alt ↓将当前行(或选中块)向下移动。Ctrl /注…

ubuntu使用webrtc库开发一个webrtc推拉流程序

目录 一. 前言 二. 整体交互流程 三. 类实现说明 1. WebRtcClient 2. SignalPeerClient 3. WebRTCStream 4. 视频源类 5. 拉流渲染 四. 使用示例 1. 推流代码示例 2. 拉流代码示例 一. 前言 在 《ubuntu编译webrtc库》我们介绍了如何在 ubuntu 上使用 webrtc 源代码…

【Block总结】ConverseNet:神经网络中的反向卷积算子

1. 论文信息 标题:Reverse Convolution and Its Applications to Image Restoration 发布平台:arXiv 论文链接:https://arxiv.org/pdf/2508.09824 代码仓库:https://github.com/cszn/converseNet 任务领域:图像恢复(去噪、超分辨率、去模糊) 核心贡献:提出了一种新的反…

优化浏览体验:4个设置让Google Chrome更好用!

想要更流畅、更快速的浏览体验吗?本文章将向大家展示Google Chrome中你应该立即更改的4个重要设置,设置调整将帮助您提升性能,让你的浏览更高效。1、打开浏览器,在地址栏输入“chrome://flags"确定,在搜索标志中输…

【Git】一篇文章带你入门Git

1. 初识 Git 1.1 Git 是什么? Git 是一个开源的分布式版本控制系统,用于高效地跟踪和管理项目代码的变更历史(不仅仅是代码,还有其它格式也是可以的~) 1.2 为什么要有 Git 在学习或者是工作的时候,比如…

8 基于机器学习进行遥感影像的地物分类-以随机森林为例

目录 1 读取数据 2 数据预处理 3 模型训练 4 精度分析 5 模型预测 1 读取数据 1.右键数据所在文件夹,用pycharm打开为项目 2.在settings中设置python环境为先前配置的带GDAL和sklearn的环境 3.新建一个文件夹命名为code来存放代码,在code文件夹中新建一个rfc.py

极简版 Nginx 反向代理实验步骤

以下是最核心的反向代理实现步骤,专注于 “客户端→Nginx 代理→后端服务” 的基础转发功能:一、准备 2 台服务器角色IP 示例需安装软件代理服务器192.168.1.10Nginx后端服务器192.168.1.11Nginx/Apache二、后端服务器配置(192.168.1.11&…

Windsurf 插件正式登陆 JetBrains IDE:让 AI 直接在你的 IDE 里“打工”

那天你说,我们可以永远在一起——成了我听到的最高兴的,而后知后觉的谎言。 而今天,AI 说:“我可以帮你写完这段代码。” —— 这才是真正的“永远在一起”。 最近,AI 编程工具赛道迎来一场“潜行式革命”:Windsurf Wave 7 正式发布 JetBrains IDE 插件版本,彻底打破“A…

188. Java 异常 - Java 异常处理规范

文章目录188. Java 异常 - Java 异常处理规范📜 什么是“Catch or Specify Requirement”?✅ 两种满足方式方法一:使用 try-catch 捕获异常方法二:使用 throws 声明异常❌ 不遵守规则会怎样?💡 哪些异常必须…

泛型通配符 T、E、K、V、?

在Java后端开发中&#xff0c;你一定在写集合类或工具类时&#xff0c;见过 T、E、K、V、? 这样的泛型通配符。但你是否有过以下疑惑&#xff1a; T、E、K、V 到底有什么区别&#xff1f;为什么大家都用这些字母&#xff1f;List<?> 和 List 有什么不同&#xff1f;什么…

基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作

基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作一.数据管理二.网络通信2.1客户端通信模块及测试用例的实现2.2MockServer搭建的相关接口介绍2.3MockServer的搭建示例一.数据管理 在前⾯的实现中&#xff0c;程序中的数据、以及界⾯操作等全部搅合在⼀起&am…

html表单登录模式代码

使用的是Content-Typeapplication/x-www-form-urlencoded形式如代码如下的html&#xff0c;后端没写下去&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>管理员登录</title><…

NLP:Transformer之self-attention(特别分享3)

本文目录&#xff1a;一、核心思想&#xff1a;一句话概括二、计算流程的直观比喻三、分步计算详解&#xff08;附数字例子&#xff09;第 1 步&#xff1a;创建 Query, Key, Value 向量第 2 步&#xff1a;计算注意力分数第 3 步&#xff1a;缩放并应用 Softmax第 4 步&#x…