目录
一、引言
二、内核源码
三、内核社区
------>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内核的官方网站,提供:
- 最新主线内核源码下载
- 各版本内核的发布信息
- 内核开发相关的公告和资源
- 内核维护者、补丁、签名等信息
特点:
是获取Linux内核源码和了解内核动态的权威入口。
3.3.2、Linux Kernel 邮件列表(LKML)
Linux Kernel 邮件列表
这是Linux内核开发的主要交流平台,开发者通过邮件列表:
- 提交补丁(patch)
- 讨论技术问题
- 审核代码
- 报告和跟踪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内核官方文档站点,内容包括:
- 内核架构、子系统、API说明
- 驱动开发指南
- 内核配置、调试、移植等文档
- 代码风格、开发流程等规范
特点:
文档内容与内核源码同步更新,是学习和开发内核的重要资料库。
3.3.5、Linux Foundation
Linux Foundation
这是Linux基金会的官方网站。Linux基金会是一个非营利性组织,主要职责包括:
- 维护和推广Linux及相关开源项目
- 组织内核峰会、开发者大会等活动
- 提供法律、资金、基础设施等支持
- 促进企业、开发者、社区的合作
特点:
不仅支持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