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 = xxx
        email = 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.com
  git config --global sendemail.smtpuser 你的QQ号@qq.com
  git config --global sendemail.smtppass 授权码
  git config --global sendemail.smtpserverport 465
  git 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文艺小少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值