linux内核学习(一)---内核社区介绍及补丁提交

目录

一、引言
二、内核源码
三、内核社区
------>3.1、社区的组织架构
------>3.2、内核社区的工作方式
------>3.3、内核社区核心网站
------------>3.3.1、Linux Kernel 官网
------------>3.3.2、Linux Kernel 邮件列表(LKML)
------------>3.3.3、Linux Kernel 邮件管理
------------>3.3.4、Linux Kernel 文档
------------>3.3.5、Linux Foundation
四、内核修改提交
------>4.1、准备工作
------------>4.1.1、补丁格式
------------>4.1.2、git commit的模板文件
------>4.2、制作补丁
------>4.3、发送补丁到邮件列表
------------>4.3.1、查找对应子系统维护者和邮件列表
------------>4.3.2、发送邮件
------>4.4、邮箱配置
------------>4.4.1、git-mail

一、引言

本系列开始会对linux内核进行系统性的学习,以源码与内核社区为基础,了解前沿的内核机制,同时也深度了解linux内核中的一些经典机制
本章会先对linux内核社区进行简单的介绍,包括源码下载、内核社区的修改提交
在这里插入图片描述

二、内核源码

关于如何下载最新的内核,到搭建虚拟的运行调试环境,可以参照这篇文章Linux内核分析(二)–qemu搭建kernel调试环境
详细介绍了如何下载最新版本内核、编译、搭建虚拟环境等

三、内核社区

Linux内核社区是指围绕Linux内核(Linux Kernel)开发、维护、测试、文档、推广等活动而形成的全球性开源技术社区。
它是世界上最大、最活跃的开源软件社区之一,由成千上万的开发者、公司、组织和爱好者共同参与。

3.1、社区的组织架构
3.1.1、Linus Torvalds

Linux内核的创始人和总维护者(BDFL,Benevolent Dictator For Life)。
负责主线(mainline)内核的最终合并和发布。

3.1.2、子系统维护者(Maintainers)

内核被划分为多个子系统(如网络、文件系统、驱动、内存管理等)。
每个子系统有一位或多位维护者,负责代码审核、合并、bug修复等。

3.1.3、开发者(Developers)

全球各地的个人开发者、公司工程师等,向内核贡献代码、修复bug、完善文档等。

3.1.4、用户和测试者

负责测试新版本、报告bug、提出改进建议。

3.2、内核社区的工作方式
3.2.1、邮件列表(Mailing List)

Linux内核开发主要通过邮件列表(尤其是linux-kernel@vger.kernel.org)进行补丁提交、讨论和审核。
各子系统也有自己的专用邮件列表。

3.2.2、补丁提交与审核(Patch Review)

开发者通过邮件发送补丁(patch),由维护者和其他开发者审核、讨论、改进。
通过git工具管理代码,最终由Linus合并到主线。

3.2.3、版本发布

内核采用“滚动开发+定期发布”模式,通常每2-3个月发布一个新主线版本(如6.1、6.2等)。
还有长期支持(LTS)版本,维护周期更长。

3.2.4、文档与协作

内核文档主要在源码树的Documentation/目录下。
也有专门的Wiki、网站、会议等。

3.3、内核社区核心网站
3.3.1、Linux Kernel 官网

Linux Kernel 官网
这是Linux内核的官方网站,提供:

  1. 最新主线内核源码下载
  2. 各版本内核的发布信息
  3. 内核开发相关的公告和资源
  4. 内核维护者、补丁、签名等信息
    特点:
    是获取Linux内核源码和了解内核动态的权威入口。
3.3.2、Linux Kernel 邮件列表(LKML)

Linux Kernel 邮件列表
这是Linux内核开发的主要交流平台,开发者通过邮件列表:

  1. 提交补丁(patch)
  2. 讨论技术问题
  3. 审核代码
  4. 报告和跟踪bug
3.3.3、Linux Kernel 邮件管理

Linux Kernel 邮件管理
是Linux内核社区的邮件列表(Mailing List)服务网站,由 vger.kernel.org 提供。
它的主要作用是集中管理和展示Linux内核及相关子系统的邮件列表,为开发者、用户和维护者提供邮件订阅、退订、发帖和归档查询等服务。
从这里可以系统性的查看某个子系统,或者某个功能的集中修改,最后还是会访问到LKML
在这里插入图片描述

  • sub (subscribe): 订阅邮件列表。当您订阅后,可以接收到该邮件列表的所有邮件。
  • unsub (unsubscribe): 取消订阅邮件列表。取消订阅后将不再接收该邮件列表的邮件。
  • post: 发送邮件到邮件列表。只有订阅者才能向列表发送邮件。
  • archive: 邮件列表的存档。您可以在这里查看历史邮件记录。
3.3.4、Linux Kernel 文档

Linux Kernel 文档
这是Linux内核官方文档站点,内容包括:

  1. 内核架构、子系统、API说明
  2. 驱动开发指南
  3. 内核配置、调试、移植等文档
  4. 代码风格、开发流程等规范
    特点:
    文档内容与内核源码同步更新,是学习和开发内核的重要资料库。
3.3.5、Linux Foundation

Linux Foundation
这是Linux基金会的官方网站。Linux基金会是一个非营利性组织,主要职责包括:

  1. 维护和推广Linux及相关开源项目
  2. 组织内核峰会、开发者大会等活动
  3. 提供法律、资金、基础设施等支持
  4. 促进企业、开发者、社区的合作
    特点:
    不仅支持Linux内核,还支持Kubernetes、Node.js、Hyperledger等众多开源项目,是全球开源生态的重要推动者。

四、内核修改提交

想要在Linux内核社区提交修改(补丁),有一套非常规范的流程

4.1、准备工作

首先需要从 https://www.kernel.org/ 下载主线源码,或用git clone拉取

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

在配置git信息

   git config --global user.name "你的名字"git config --global user.email "你的邮箱"

或者直接编辑"~/.gitconfig" 文件

[user]name = xxxemail = xxx@xxx.com
[core]editor = vim
4.1.1、补丁格式

推荐阅读源码树中的 Documentation/process/ 目录,尤其是:
SubmittingPatches
process/submitting-patches.rst
process/maintainer-handbooks.rst

<模块名-如vfs, Documentation>: <一句话概括你修复的问题>
// 空一行
<详细描述你的修改,可以分段,可以空行,自由发挥>
// 空一行
<签名-由git commit -s自动生成>
4.1.2、git commit的模板文件

推荐使用模板文件,不用每次都输入一遍

git config commit.template [模板文件名] //这个命令只能设置当前分支的提交模板
git config --global commit.template /home/xhhuang/project/CommitTemplate( 模板文件名/路径) //这个命令能设置全局的提交模板
4.2、制作补丁
git add <修改的文件>
git commit -s

-s参数会自动添加Signed-off-by,这是内核社区强制要求的开发者声明。

git format-patch --subject-prefix='PATCH' -1 -o .patch/

–subject-prefix:为邮件标题添加前缀,分为以下三种:

  • PATCH:常规且正式的patch,可以在后面加上“V1”,“V2”等,标识版本号
  • RFC:非正式提交,希望一起讨论这个patch
  • RESEND:重新发送之前的patch(可能被处理人员遗忘了)

-1:参数是要求以最近的1个commit记录生成patch,当前还有-o参数可以指定patch文件的生成目录

最后的样式如下:
在这里插入图片描述

4.3、发送补丁到邮件列表
4.3.1、查找对应子系统维护者和邮件列表

使用脚本自动查找:

./scripts/get_maintainer.pl 0001-xxx.patch
./scripts/get_maintainer.pl <modified file>$:./scripts/get_maintainer.pl ./drivers/watchdog/dw_wdt.c
// 驱动提交补丁时,应该把他们加到邮件的“收件人(To)”或“抄送(Cc)”里
Wim Van Sebroeck <wim@linux-watchdog.org> (maintainer:WATCHDOG DEVICE DRIVERS)
Guenter Roeck <linux@roeck-us.net> (maintainer:WATCHDOG DEVICE DRIVERS)		
// 	提交补丁时,应该抄送(Cc)这个列表,这样所有关注看门狗驱动的开发者都能看到你的补丁和讨论
linux-watchdog@vger.kernel.org (open list:WATCHDOG DEVICE DRIVERS)
// 所有内核相关的补丁、讨论都可以抄送这个列表,覆盖面最广。
linux-kernel@vger.kernel.org (open list)

或在 http://vger.kernel.org/vger-lists.html 查找相关邮件列表。

4.3.2、发送邮件
git send-email \
--to 收件人邮箱 \
--cc 抄送1邮箱 \
--cc 抄送2邮箱 \
...
<your patch>

邮件主题和内容会自动按补丁格式生成。
发送邮件完成后, 可在以下网站查看patch是否发送成功

4.4、邮箱配置

git send-email 需要通过SMTP服务器发送邮件
所以我们需要先配置smtp服务器

  git config --global sendemail.smtpserver smtp.qq.comgit config --global sendemail.smtpuser 你的QQ号@qq.comgit config --global sendemail.smtppass 授权码git config --global sendemail.smtpserverport 465git config --global sendemail.smtpencryption ssl

注意:QQ邮箱需在设置中开启“POP3/SMTP服务”,并获取授权码。
也可以在foxmail中搭建
在这里插入图片描述

4.4.1、git-mail

之后下载git-email
sudo apt-get install git-email
最后就可以使用git sendmail发送邮件

git send-email --to=收件人邮箱 0001-*.patch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86050.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86050.shtml

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

相关文章

轻量级web开发框架之Flask web开发框架学习:get请求数据的发送

Flask是一个使用 Python 编写的轻量级 Web 应用框架&#xff0c;简介灵活&#xff0c;可快速构建开发框架。 协作流程示例 客户端请求 → Web服务器&#xff08;Nginx&#xff09; → WSGI服务器&#xff08;Gunicorn/uWSGI&#xff09;↓WSGI协议传递请求数据&#xff08;env…

Vue 3 异步三剑客:Suspense、async setup() 和 await 的戏剧性关系,白屏的解决

文章目录 &#x1f3ad; Vue 3 异步三剑客&#xff1a;Suspense、async setup() 和 await 的戏剧性关系&#xff0c;白屏的解决&#x1f3ac; 角色介绍&#x1f3ad; 正常演出流程&#xff08;有 Suspense 时&#xff09;&#x1f4a5; 灾难场景&#xff08;缺少 Suspense 时&a…

【JavaScript-Day 48】告别 Ajax,拥抱现代网络请求:Fetch API 完全指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

BUUCTF在线评测-练习场-WebCTF习题[极客大挑战 2019]Knife1-flag获取、解析

解题思路 这题没有什么解题思路&#xff0c;打开靶场&#xff0c;标题是白给的shell 页面显示了 eval($_POST["Syc"]); 这是php webshell命令&#xff0c;密码为Syc&#xff0c;可直接通过该命令连接&#xff0c;根据标题提示&#xff0c;直接尝试用蚁剑连接 连接成…

Qt—(Qt线程,Qt进程,,QT与sqlite数据库)

一 Qt线程与进程概述 线程与进程对比 特性线程 (QThread)进程 (QProcess)内存空间共享父进程内存独立内存空间创建开销小 (几MB)大 (几十MB)通信方式共享内存/信号槽管道/套接字/文件崩溃影响导致整个进程终止仅自身终止适用场景高并发任务、计算密集型隔离第三方应用、安全需求…

计算机视觉阶段一:CV入门基础

目录 学习目标&#xff1a; 一、核心知识点 二、实用工具推荐 三、学习内容与步骤 1.环境搭建 2.图像获取与显示 3 图像基础处理 4 图像几何变换 5 图像像素操作 四、实战任务建议 实战 1&#xff1a;图像加载 显示 保存 实战 2&#xff1a;灰度图 边缘检测 图…

新增MCP接入和AutoAgent,汉得灵猿AI中台1.6版正式发布!

汉得灵猿&#xff08;大圣&#xff09;AI中台1.6版本&#xff0c;经过数月迭代&#xff0c;现已正式发布&#xff01; 新版本最被期待的新功能&#xff0c;无疑是4月份预告的MCP接入&#xff0c;而令人同样激动的另一项新功能&#xff0c;则是AutoAgent动态规划智能体。除了两…

总结汇报思路

一、明确汇报目标 受众需求&#xff1a;领导/客户/团队最关心什么&#xff1f;&#xff08;结果&#xff1f;问题&#xff1f;下一步计划&#xff1f;&#xff09; 核心目的&#xff1a;展示成果&#xff1f;争取资源&#xff1f;总结经验&#xff1f;解决问题&#xff1f; 时…

文件锁的艺术:深入解析 `fcntl(F_SETLK/F_GETLK)`

引言&#xff1a;在共享资源时代守护数据一致性 在多进程/多线程的应用场景中&#xff0c;文件作为一种共享资源常常面临被并发访问的挑战。想象一个数据库系统&#xff0c;多个客户端可能同时尝试修改同一数据文件&#xff1b;或者一个配置文件&#xff0c;需要确保在更新时不…

一个免费的视频、音频、文本、图片多媒体处理工具

大家好&#xff0c;我是小悟。 给大家推荐一款可以免费使用的视频、音频、文本、图片处理工具&#xff0c;名字叫百创工坊&#xff0c;不用下载&#xff0c;不用注册&#xff0c;有免费的用就赶紧薅吧。 视频工具 提取音频&#xff1a;从视频中提取音频文件&#xff0c;支持多…

在 ef core 中操作复杂类型的序列化和反序列化时,如何全局设置 utf-8 编码避免中文字符被转义?

我们在使用 Entity Framework Core&#xff08;EF Core&#xff09; 时&#xff0c;如果希望 全局设置 JSON 序列化和反序列化使用 UTF-8 编码&#xff0c;通常需要配置 System.Text.Json 的默认行为&#xff0c;因为 EF Core 6.0 及以上版本默认使用 System.Text.Json 进行 JS…

WPF CommunityToolkit.Mvvm 信使 (ObservableRecipient)

WPF CommunityToolkit.Mvvm 中的 ObservableRecipient 是什么&#xff1f; ObservableRecipient 是 .NET Community Toolkit MVVM 库中的一个核心类&#xff0c;继承自 ObservableObject。它专为 WPF 应用设计&#xff0c;提供以下核心功能&#xff1a; 基础数据绑定支持&am…

《C++》命名空间简述

文章目录 一、命名空间定义二、访问命名空间内的成员三、标准命名空间:std四、嵌套命名空间 一、命名空间定义 在C中&#xff0c;命名空间&#xff08;namespace)是一种将标识符分组的机制&#xff0c;用于避免重命名。例如&#xff1a; int a 3;int main() {int a 0;print…

【路径规划】基于Matlab的改进RRT算法二维/三维路径规划

基于Matlab的改进RRT算法二维/三维路径规划 一、引言 在机器人学、自动驾驶等领域&#xff0c;路径规划是一个关键问题&#xff0c;它旨在为机器人或车辆找到一条从起始点到目标点的安全、高效的路径。RRT&#xff08;Rapidly-exploring Random Trees&#xff09;算法作为一种…

PHP的命名空间与自动加载机制

在PHP 5.3版本之后&#xff0c;引入了命名空间的概念&#xff0c;这为解决全局命名冲突和促进代码的模块化提供了强有力的工具。命名空间允许开发者将类、函数和常量封装在不同的命名空间中&#xff0c;从而避免了全局范围内的名称冲突问题。 命名空间基础 命名空间在PHP中是…

OpenSIPS 邂逅 Kafka:构建高效 VoIP 消息处理架构

使用场景使用步骤 引入模块组装&发送数据消费数据故障转移 使用场景 异步日志处理&#xff1a;将 OpenSIPS 中的 SIP 信令日志、通话记录&#xff08;CDR&#xff09;等数据发送到 Kafka 队列中。 事件通知与监控&#xff1a;利用 OpenSIPS 的 event_interface 模块将 S…

《AI大模型应用技术开发工程师》学习总结

以下是对你提供的《AI大模型应用技术开发工程师》课程内容的系统梳理&#xff0c;已去除所有广告、价格、报名、个人信息等内容&#xff0c;并补全了技术要点&#xff0c;最后给出客观的学习建议和个人感想&#xff0c;适合公开分享或自我学习参考。 AI大模型应用技术开发工程师…

Python爬虫实战:研究LOSO相关技术

1. 引言 1.1 研究背景与意义 随着互联网数据的爆炸式增长,个性化推荐系统成为提升用户体验的关键技术。准确捕捉用户兴趣需要大量多维度数据,但获取高质量标注数据面临隐私保护、数据分散等挑战。网络爬虫技术为自动采集用户行为数据提供了解决方案,而如何有效评估模型在个…

stm32万年历仿真+keil5程序

stm32万年历 本设计是利用单片机实现一个简易万年历系统&#xff0c;能够准确显示时、分、秒信息。用户可通过特定按键对时间进行设置调整&#xff0c;具备基本的时间校准功能&#xff0c;可满足日常简易计时需求。运用了stm32单片机模块内部定时器 / 计数器功能来实现精确计时…

操作系统--名称解释

第一章: 操作系统:位于硬件层之上,所有软件层之下的一个系统软件,是管理系统中各种软硬件资源,方便用户使用计算机系统的程序集合 并发:宏观上是同时发生,但是再微观是交替发生的(若干事件在同一时间间隔内发生,单CPU) 并行:微观上同时发生(要求多个CPU) 共享:系统的资源可以…