向內核社區提交補丁

一、背景

內核的版本一直以來一直在持續迭代,離不開眾多開發者的貢獻。有時候我們會根據項目要求基于現有的內核版本開發一些新的功能或者修復掉一些特定場下的問題,我們是可以將其提交給社區的。

一般提交社區有兩個基本原則,一是提交的補丁解決的是一個共性問題,并非一個特定的需求,或者說是具有一定的普適性,因為內核版本是旨在運用于所有linux系統里的版本,提交的補丁也是旨在放在內核公共使用的大版本里。如果一個功能沒有足夠的普適性,那么就沒必要合入進內核社區,自己項目里去維護就可以了。第二個基本原則,是提交的補丁要盡量與現有內核里的模塊要有一定的相似性,如果一下子提交一個特別大的改動,甚至直接去掉了現有的一些機制,甚至把名字都換了個遍,那么這樣的補丁是很難被合入的。

這篇博客會從下載代碼到制作補丁再到提交補丁這一連串步驟進行介紹。假設是你已經有一些文件的改動可能想要提到社區。

二、下載代碼

2.1 根據MAINTAINERS下載對應的倉庫

下載代碼前,需要先根據已經下載下來的一份相對較新的版本里的代碼里的第一級目錄里的MAINTAINERS:

如上圖,假設你改的是network子系統,找到MAINTAINERS里對應的倉庫,下載時就下對應的倉庫即可。

2.2 參考子系統對應的開發指導文檔,比如net的maintainer-netdev.rst

有些子系統有專門的開發指導文檔,比如net的maintainer-netdev.rst:

對于net而言,已發布的版本的問題的修復是下載下面這個版本:

git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git

對于新的特性需要下載下面這個版本:

git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git

下載代碼時,由于網速不給力,可以通過制定--depth=1,如下命令:

git clone --depth=1 git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git

三、準備補丁

3.1 準備提交單個補丁

準備補丁的步驟,程序員基本都知道,要注意git add后敲:

git commit -s

自動加上簽名。

git commit過后,使用git format-patch -1來生成一個patch:

git format-patch -1

上面的-1? ? ?1表示生成最近的一個提交

-2 表示生成最近的兩個提交

上面的命令生成出.patch文件后,要記得修改主題,根據要求加上倉庫名比如下圖里的net-next(具體要不要帶上倉庫名需要自行參考他人的提交的補丁),和當前修改的版本號v11就是修改了11個版本了,0/2是對應于下面 3.2 里講到的補丁系列而言的扉頁補丁。

3.2 準備提交一個補丁系列

所謂提交一個補丁系列就是指一次最終合入,是合入了多筆補丁,這種現象在內核社區提交里,現在看是非常普遍的。

如下命令來制作:

git format --cover-letter -2

上面的命令里-2是git log里的最近兩個補丁,形成一個補丁系列,--cover-letter會生成一個0/n的扉頁補丁,會合并上后面的補丁里的所有的提交,形成一個下圖里的合并后的改動描述:

3.3 有補丁之后,需要用內核版本里自帶的scripts下的checkpatch.pl來檢查補丁格式

./scripts/checkpatch.pl *.patch

四、準備一個郵箱,郵箱需要支持smtp服務

我是使用的163郵箱,我確認163是可以配置的

這是為的是可以通過git send-email來發送。

4.1 配置smtp

自行去尋找對應郵箱的smtp的方法

配置完后,有一個smtp的密碼需要填到下圖里的smtpPass里去:

4.2 git send-email發送前需要確定要發送的人和抄送的人

通過下面的命令來得知要發送的人和抄送的人:

./scripts/get_maintainer.pl *.patch

4.3 git send-email發送補丁

下圖是我history顯示出來的我之前發送補丁時的命令樣子:

五、發送出來后,可以通過下面的鏈接進行查看,看到你剛發的補丁了

鏈接是:

https://lkml.org/

之前我發送的補丁的v0版本時的lkml.org看到的截圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/100451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/100451.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/100451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TENGJUN-USB TYPE-C 24PIN測插雙貼連接器(H14.3,4腳插板帶柱):USB4.0高速傳輸時代的精密連接方案解析

在高速數據傳輸與多設備互聯需求日益增長的當下,USB TYPE-C接口憑借其可逆插拔、高兼容性的優勢成為主流,而TENGJUN推出的USB TYPE-C 24PIN測插雙貼連接器(規格:H14.3,4腳插板帶柱) ,以對USB4.0…

企業級 Docker 應用:部署、倉庫與安全加固

1 Docker簡介及部署方法 1.1 Docker簡介 Docker之父Solomon Hykes:Docker就好比傳統的貨運集裝箱 Note 2008 年LXC(LinuX Contiainer)發布,但是沒有行業標準,兼容性非常差 docker2013年首次發布,由Docker, Inc開發1.1.1 什么是do…

rust語言 (1.88) 學習筆記:客戶端和服務器端同在一個項目中

同一項目下多個可執行文件,多個子項目參照以下: 一、項目目錄 項目/|-- client/|-- main.rs|-- Cargo.toml|-- server/|-- main.rs|-- Cargo.toml|-- Cargo.toml二、項目公共 Cargo.toml [workspace] # 定義Rust工作區配置 members …

mac本地安裝mysql

本人環境 macOs 14.5 1.下載安裝mysql https://dev.mysql.com/downloads/mysql/ 配置環境變量,打開terminal vim ~/.bash_profile 添加MYSQL_HOME/usr/local/mysql 在PATH中添加 通過mysql --version命令查看版本 2.開啟mysql 打開終端teminal,輸入命令 sudo…

面試前端遇到的問題

面試官讓我寫一個delay函數然后這是我寫的代碼async function delay(){setTimeout(function() {}, 3000); }面試官就和我說不是這個,用promise當時就蒙了,什么東西,為什么要用promise然后問豆包說Promise 是 JavaScript 中用于處理異步操作的…

Ubuntu Desktop 22.04.5 LTS 使用默認的 VNC 遠程桌面

1. 打開 VNC 打開設置 - 分享 - 遠程桌面2. 配置 VNC 打開遠程桌面 啟用vnc 選擇vnc密碼訪問 配置密碼3. 固定密碼 遠程桌面的訪問密碼在每次開機后會刷新一次,可以通過以下方式固定 打開【應用程序】-【附件】-密碼和加密密鑰(或…

【無線安全實驗4】基于偽隨機數的WPS PIN碼逆向(精靈塵埃/仙塵攻擊)

文章目錄1 原理分析1.1 WPS連接過程1.1.1 初始階段1.1.2 注冊階段1.2 WPS攻擊原理1.2.1 在線攻擊1.2.2 離線攻擊1.2.2.1 Ralink模式1.2.2.2 eCos模式2 實驗過程3 參考資料在2011年 Stefan Viehbck 演示過WPS的在線暴力攻擊,由于PIN碼猜測最多只需11000種組合&#x…

IDEA開發過程中經常使用到的快捷鍵

IntelliJ IDEA 開發 Java 時常用的快捷鍵列表 代碼編輯與行操作快捷鍵功能描述Ctrl Y刪除當前行。Ctrl D復制當前行到下一行。Shift Alt ↑將當前行(或選中塊)向上移動。Shift Alt ↓將當前行(或選中塊)向下移動。Ctrl /注…

ubuntu使用webrtc庫開發一個webrtc推拉流程序

目錄 一. 前言 二. 整體交互流程 三. 類實現說明 1. WebRtcClient 2. SignalPeerClient 3. WebRTCStream 4. 視頻源類 5. 拉流渲染 四. 使用示例 1. 推流代碼示例 2. 拉流代碼示例 一. 前言 在 《ubuntu編譯webrtc庫》我們介紹了如何在 ubuntu 上使用 webrtc 源代碼…

【Block總結】ConverseNet:神經網絡中的反向卷積算子

1. 論文信息 標題:Reverse Convolution and Its Applications to Image Restoration 發布平臺:arXiv 論文鏈接:https://arxiv.org/pdf/2508.09824 代碼倉庫:https://github.com/cszn/converseNet 任務領域:圖像恢復(去噪、超分辨率、去模糊) 核心貢獻:提出了一種新的反…

優化瀏覽體驗:4個設置讓Google Chrome更好用!

想要更流暢、更快速的瀏覽體驗嗎?本文章將向大家展示Google Chrome中你應該立即更改的4個重要設置,設置調整將幫助您提升性能,讓你的瀏覽更高效。1、打開瀏覽器,在地址欄輸入“chrome://flags"確定,在搜索標志中輸…

【Git】一篇文章帶你入門Git

1. 初識 Git 1.1 Git 是什么? Git 是一個開源的分布式版本控制系統,用于高效地跟蹤和管理項目代碼的變更歷史(不僅僅是代碼,還有其它格式也是可以的~) 1.2 為什么要有 Git 在學習或者是工作的時候,比如…

8 基于機器學習進行遙感影像的地物分類-以隨機森林為例

目錄 1 讀取數據 2 數據預處理 3 模型訓練 4 精度分析 5 模型預測 1 讀取數據 1.右鍵數據所在文件夾,用pycharm打開為項目 2.在settings中設置python環境為先前配置的帶GDAL和sklearn的環境 3.新建一個文件夾命名為code來存放代碼,在code文件夾中新建一個rfc.py

極簡版 Nginx 反向代理實驗步驟

以下是最核心的反向代理實現步驟,專注于 “客戶端→Nginx 代理→后端服務” 的基礎轉發功能:一、準備 2 臺服務器角色IP 示例需安裝軟件代理服務器192.168.1.10Nginx后端服務器192.168.1.11Nginx/Apache二、后端服務器配置(192.168.1.11&…

Windsurf 插件正式登陸 JetBrains IDE:讓 AI 直接在你的 IDE 里“打工”

那天你說,我們可以永遠在一起——成了我聽到的最高興的,而后知后覺的謊言。 而今天,AI 說:“我可以幫你寫完這段代碼。” —— 這才是真正的“永遠在一起”。 最近,AI 編程工具賽道迎來一場“潛行式革命”:Windsurf Wave 7 正式發布 JetBrains IDE 插件版本,徹底打破“A…

188. Java 異常 - Java 異常處理規范

文章目錄188. Java 異常 - Java 異常處理規范📜 什么是“Catch or Specify Requirement”?? 兩種滿足方式方法一:使用 try-catch 捕獲異常方法二:使用 throws 聲明異常? 不遵守規則會怎樣?💡 哪些異常必須…

泛型通配符 T、E、K、V、?

在Java后端開發中&#xff0c;你一定在寫集合類或工具類時&#xff0c;見過 T、E、K、V、? 這樣的泛型通配符。但你是否有過以下疑惑&#xff1a; T、E、K、V 到底有什么區別&#xff1f;為什么大家都用這些字母&#xff1f;List<?> 和 List 有什么不同&#xff1f;什么…

基于腳手架微服務的視頻點播系統-數據管理與網絡通信部分的預備工作

基于腳手架微服務的視頻點播系統-數據管理與網絡通信部分的預備工作一.數據管理二.網絡通信2.1客戶端通信模塊及測試用例的實現2.2MockServer搭建的相關接口介紹2.3MockServer的搭建示例一.數據管理 在前?的實現中&#xff0c;程序中的數據、以及界?操作等全部攪合在?起&am…

html表單登錄模式代碼

使用的是Content-Typeapplication/x-www-form-urlencoded形式如代碼如下的html&#xff0c;后端沒寫下去&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>管理員登錄</title><…

NLP:Transformer之self-attention(特別分享3)

本文目錄&#xff1a;一、核心思想&#xff1a;一句話概括二、計算流程的直觀比喻三、分步計算詳解&#xff08;附數字例子&#xff09;第 1 步&#xff1a;創建 Query, Key, Value 向量第 2 步&#xff1a;計算注意力分數第 3 步&#xff1a;縮放并應用 Softmax第 4 步&#x…