目錄
一、引言
二、內核源碼
三、內核社區
------>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