linux 生成内核patch,如何向 Linux Kernel 提交 Patch

昨晚終於向內核上游提交了人生中第一個 Patch,今天早上起床迫不及待的看手機,發現維護者 Andrew Morton 在6點31分回復我了:The patch has been added to the -mm tree. 頓時感到異常興奮。雖然這個 Patch 沒什么技術含量,但是至少這是我在看代碼過程中自己發現的,終於體會到了進步的感覺。下面我把 Patch 提交的步驟記錄一下,也供別人參考下。

Git Email 配置

為了確保發送的 Patch 格式不會出錯,我們使用 Git 自身提供的命令 git send-email。

安裝 git send-email

我用的 Fedora,安裝命令為 sudo dnf install git-email,其他系統請自行使用 yum 或 apt。

配置 git-email 使用 Gmail 郵箱服務

我比較喜歡 Gmail,所以此處就讓 git-email 使用 Gmail 提供的郵箱服務了,換句話說 git-email 只是 一個郵件發送客戶端而已,真正的工作還需要 Gmail 來完成。

打開 Git 配置文件

vim ~/.gitconfig

文件末尾追加如下內容 [sendemail]

from = My Name

smtpserver = smtp.gmail.com

smtpuser = my_email@gmail.com

smtpencryption = tls

smtppass = my_gmail_password

chainreplyto = false

smtpserverport = 587

修改代碼樹並生成 Patch

建立一個新的分支

這是為之后生成 Patch 提供方便,使用命令如下:

git branch develop

git checkout develop

修改內核代碼樹

這一步修改什么就取決於你了。

提交修改

git add .

git commit -s -v

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

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

mm: fix some errors

Why I do these changes and how I do it.

Signed-off-by: My Name

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

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

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

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

如果 commit 之后還想修改 Commit 信息的話需要使用命令 git commit --amend -v。

生成 Patch

既然修改已經提交,那么是時候生成 Patch 了。

git format-patch master

這條命令是以 master 分支為基准,檢測你在當前 develop 分支所做的修改並生成 Patch 文件。

命令完成后,你就可以看到你的 Patch 文件了。

[haolee@haolee linux]$ ls *.patch

0001-mm-fix-some-errors.patch

檢查你的 Patch 格式

運行以下命令檢查你的 Patch 格式有沒有問題,要做到 0 errors, 0 warnings。

./scripts/checkpatch.pl 0001-mm-fix-some-errors.patch

發送 Patch

既然 Patch 已經生成完畢,那么是時候發送給上游維護者了。

找出應該發給誰

運行以下命令找出你應該把 Patch 發給誰。

./scripts/get_maintainer.pl -f include/linux/gfp.h

注意,include/linux/gfp.h 這個文件名改成你所修改的文件。

在我這里,該命令輸出如下:

Andrew Morton (commit_signer:7/8=88%)

Michal Hocko (commit_signer:3/8=38%,authored:1/8=12%,added_lines:3/21=14%,removed_lines:10/33=30%)

Vlastimil Babka (commit_signer:3/8=38%,authored:1/8=12%,added_lines:8/21=38%,removed_lines:6/33=18%)

Alexander Duyck (commit_signer:3/8=38%,authored:3/8=38%,added_lines:6/21=29%,removed_lines:5/33=15%)

Mel Gorman (commit_signer:2/8=25%)

Vladimir Davydov (authored:1/8=12%,removed_lines:9/33=27%)

My Name (authored:1/8=12%,added_lines:2/21=10%,removed_lines:2/33=6%)

linux-mm@kvack.org (open list:MEMORY MANAGEMENT)

linux-kernel@vger.kernel.org (open list)

測試發送

對於像我這樣的新手來說,最好在發送給上游維護者之前先拿自己郵箱做個測試,小心點總沒壞處。

git send-email --to my_qq@qq.com 0001-mm-fix-some-errors.patch

一切正常的話,你應該可以收到郵件了,檢查下格式什么的是否和你預想的一樣。

正式發送

git send-email --to akpm@linux-foundation.org \

--cc alexander.h.duyck@intel.com \

--cc mhocko@suse.com --cc vbabka@suse.cz \

--cc mgorman@suse.de \

--cc l.stach@pengutronix.de \

--cc vdavydov.dev@gmail.com \

--cc linux-mm@kvack.org \

--cc linux-kernel@vger.kernel.org \

--cc my_email@gmail.com \

0001-mm-fix-some-errors.patch

之后你的 Patch 就發送給上游維護者並抄送到對應的郵件列表了。

后續

靜靜的等待維護者的郵件通知吧,如果 Patch 並入上游分支的話會給你發郵件通知的,如果被打回的話也會告訴你哪里錯了。等我以后提交個復雜點的補丁被打回之后再來寫這部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值