【42】如何向linux kernel主線提交patch

一、準備工作
1、讀下面的文檔,看看向kernel提交patch需要準備哪些
https://github.com/0xAX/linux-insides
linux kernel doc英文原版
https://www.kernel.org/doc/html/latest/index.html
linux kernel doc中文翻譯
https://www.kernel.org/doc/html/latest/translations/zh_CN/index.html
如何讓修改進入kernel
https://www.kernel.org/doc/html/v4.17/process/submitting-patches.html
如何讓修改進入kernel中文
https://www.kernel.org/doc/html/latest/translations/zh_CN/process/submitting-patches.html
謝寶友: 手把手教你給Linux內核發patch
https://juejin.im/post/5daee99ee51d4524c902b44c
如何向 Linux 內核上游提交 Patch
https://blog.csdn.net/mirage1993/article/details/53957205
如何參與linux社區開發中文
http://ocselected.org/posts/contribute_to_community/how_to_participate_in_the_linux_community/
非常重要++++++++++++++++++++++++++++++++++++
如何向linux kernel提交patch的一個示例
https://www.linuxidc.com/Linux/2017-04/142492.htm

2、配置郵箱
(1)ubuntu下配置郵箱
https://blog.51cto.com/mirage1993/1912785
sudo apt-get install git-email
vim ~/.gitconfig
文件末尾追加如下內容

[sendemail]
        smtpServer = mail.xxx.cn
        smtpServerPort = 587
        smtpUser = [email protected]
        smtpEncryption = tls
~                              

在這裏插入圖片描述
(2)windows配置Davmail和Thunderbird
https://blog.csdn.net/csfreebird/article/details/7402935

http://davmail.sourceforge.net/download.htmldavmail getway下載地址
DavMail Gatway只需要修改URL,URL裏面填寫郵箱服務器地址,其他都是默認配置
在這裏插入圖片描述
thunderbird英文版下載地址
thunderbird 配置參考http://davmail.sourceforge.net/thunderbirdmailsetup.html
輸入name、郵箱地址、password然後點continue
在這裏插入圖片描述
Incoming server type is POP, server hostname is localhost, default port is 1110, no SSL and normal password authentication. Outgoing server is localhost, default port is 1025, no SSL and normal password authentication. Set your username (windows account name or email address) and click Re-test to validate account settings, then Create Account:

設置incoming server type爲POP3或者IMAP(建議選擇IMAP,POP3會導致thunderbird郵箱和主郵箱不一樣),注意server hostname要改成localhost,port可以手動輸入默認值1110,SSL是None,authentication選擇Noarmal password
outgoning server hostname要改成localhost,port可以手動輸入默認值1025,SSL是None,authentication選擇Noarmal password
在這裏插入圖片描述
thunderbird設置純文本發送------非常重要
【Tools -> Account Settings -> [Account Name]-> Composition & Addressing -> Compose messages in HTML format】。
在這裏插入圖片描述
在這裏插入圖片描述
3、把默認的文本編輯器變成vim
Ubuntu模式的編輯器是nano,不過我更熟悉vim的快捷鍵,這樣git commit時可以更方便操作
vim ~/.bashrc
在文件末尾主機下面內容

export EDITOR=/usr/bin/vim

在這裏插入圖片描述
4、ubuntu下安裝mhonarc
sudo apt-get install mhonarc
mhonarc可以把eml格式的郵件轉換成html的,這樣可以查看發送給自己的patch是否符合要求。

5、訂閱linux郵件組
http://vger.kernel.org/vger-lists.html
找到對應的郵件組,其中linux-kernel是必須的,點擊subsribe,就會發郵件給[email protected]
安裝提示回覆郵件訂閱就可以
在這裏插入圖片描述
在這裏插入圖片描述
訂閱成功後,會受到succeeded的回覆。
在這裏插入圖片描述

二、修改代碼
1、clone torvalds主線代碼(也可以clone各個維護者的分支)
參考https://www.kernel.org/doc/html/v4.17/process/submitting-drivers.html#submittingdrivers

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

2、創建一個開發分支,並在分支上修改代碼
git checkout -b ntb_perf
注意:修改完畢代碼可以用
./scripts/checkpatch.pl -f xx.c檢查自己的代碼的風格是不是滿足linux的風格。
commit時使用git commit -s -v,如果 commit 之後還想修改 Commit 信息的話需要使用命令git commit --amend -v

git commit -s -v
注意 git commit 命令會自動打開編輯器讓你編輯 Commit 信息,-s 參數可以自動在你的 Commit 信息下加上一行Signed-off-by: My Name [email protected] ,-v 參數會在你的 Commit 信息下方顯示出你做的修改,確保你能再三檢查自己的改動,這一個參數不是必須的,但是推薦這麼做。

注意,Commit 信息的格式有嚴格限制,我就不廢話了,直接上模板。

mm: fix some errors

Why I do these changes and how I do it.

Signed-off-by: My Name <[email protected]>

第一部分是 short description,以子系統名打頭,比如 mm,注意分號後面加個空格,不知道子系統名的可以看看你修改的這個文件的修改歷史,看看之前的開發者是怎麼寫的。這一部分需要使用一句簡短的話描述你所做的修改,要讓維護者一眼就看出這個 Patch 大概幹了什麼事。

第二部分是 the body of your patch,這一部分要詳細的解釋你爲何要做這個修改,以及怎麼做的,注意時態用現在時,語態用主動形式

第三部分是之前的 -s 參數自動加上的,不用管。

必須要注意的是,這三部分之間都要有一個空行隔開。

如果 commit 之後還想修改 Commit 信息的話需要使用命令 git commit --amend -v。
在這裏插入圖片描述
在這裏插入圖片描述
三、製作patch並檢查patch
git format-patch master
如果patch是已經發送給maintainer了,maintainer提了建議,你自己根據建議修改過代碼,生產補丁時建議跟上 -v2 -v3
例如:
git format-patch -3 -v2 --cover-letter -o patchsdirectory

-3 代表從當前的分支 HEAD 位置往前3個提交處生成補丁。
-v2 代表這已經是第二次生成補丁了,需要注意這並不是你個人第二次提取補丁的意思,而是你前一次已經通過郵件發送到了郵件列表之後,被維護者提供建議之後的再一次修改提取補丁,這樣提取的補丁會有 [PATCH v2] 的字樣開頭,以此類推,有時候遇到重大修改可能需要上十次。
–cover-letter 就是的作用就是有時候你需要提交一系列的補丁,那麼最好有個總結的文字再前面,而這個參數會生成一個 v1-0000-cover-letter.patch 的補丁,需要你自己修改名字以及它裏面的內容,你需要儘可能的詳細,讓維護者正確理解你的代碼所要表達的意思。
-o directory就是將補丁全部出去到directory目錄,這樣容易歸納處理。
在這裏插入圖片描述
檢查補丁:./scripts/checkpatch.pl xxx.patch

做到0 warning,0 error
注意:checkpatch.pl這個腳本有點問題,如果補丁是fix之前的錯誤的提交,補丁中需要包含錯誤提交的commit id(一般是哈希值前12位),這樣這個補丁就要放到.git的同級目錄,checkpatch.pl的腳本會誤報Unkonwn commit id
在這裏插入圖片描述
同一個補丁放到.git統計目錄就不會出問題。
在這裏插入圖片描述
在這裏插入圖片描述
四、把patch發給自己
git send-email --no-chain-reply-to --to=xx@自己的郵箱,yy@自己的郵箱 0001-NTB-ntb_perf-fix-address-err-in-perf_copy_chunk.patch
在這裏插入圖片描述
–no-chain-reply-to
如果已設置,每封電子郵件將作爲對以前發送的電子郵件的回覆發送。如果使用“–no-chain-reply-to”禁用,則首先發送的所有電子郵件將作爲回覆發送給第一封電子郵件。當使用這個時,建議給出的第一個文件是整個補丁系列的概述。默認情況下禁用,但sendemail.chainReplyTo可以使用配置變量啓用它。

五、使用thunderbird 把mail保存爲eml,使用mhonrac將eml格式的mail變成html的
在thunderbird 裏面找到對用郵件,右鍵->另存爲xxxx.eml

mhonarc -add [PATCH]\ NTB\ \ ntb_perf\ \ Fix\ address\ err\ in\ perf_copy_chunk.eml
在這裏插入圖片描述
六、使用瀏覽器查看threads.html是否要求。

七、檢查修改的模塊對應的維護者,併發郵件給
運行以下命令找出你應該把 Patch 發給誰。
./scripts/get_maintainer.pl -f xxx.c
一般會給出維護者,由於我改的ntb_perf.c沒有給出維護者
只能去patch網頁和lkml網頁查看之前的郵件發送給誰了
https://lore.kernel.org/patchwork/project/lkml/list/
https://lore.kernel.org/lkml/
在這裏插入圖片描述
或者自己在查看MAINTAINERS文件
在這裏插入圖片描述
git send-email --no-chain-reply-to --to [email protected],[email protected],[email protected] --cc [email protected],[email protected] 0001-NTB-ntb_perf-Fix-address-err-in-perf_copy_chunk.patch

七、回覆maintainer的各種問題
1、通過郵件查看
2、通過網頁查看
http://lkml.iu.edu/hypermail/linux/kernel/
知道最新歸檔的然後選擇author,然後ctrl+F找到自己的名字。
通過thunderbird 回覆maintainer的各種問題,採用交叉回覆interleaved post(inline replying)的方式回覆郵件。
interleaved post方式見
https://en.wikipedia.org/wiki/Posting_style

post style翻譯
使用 Thunderbird 檢查郵件源碼,確保:
– 郵件內容以純文本格式編碼
– 需有 References、In-Reply-To 等標籤
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章