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
英文地址,請注明出處:http://en.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) 共享:系統的資源可以…