如何提交你的第一個(gè)Linux內(nèi)核補(bǔ)丁
學(xué)習(xí)如何做出你的*** Linux 內(nèi)核貢獻(xiàn),以及在開始之前你應(yīng)該知道什么。
Linux 內(nèi)核是***且變動最快的開源項(xiàng)目之一,它由大約 53,600 個(gè)文件和近 2,000 萬行代碼組成。在全世界范圍內(nèi)超過 15,600 位程序員為它貢獻(xiàn)代碼,Linux 內(nèi)核項(xiàng)目的維護(hù)者使用了如下的協(xié)作模型。
本文中,為了便于在 Linux 內(nèi)核中提交你的***個(gè)貢獻(xiàn),我將為你提供一個(gè)必需的快速檢查列表,以告訴你在提交補(bǔ)丁時(shí),應(yīng)該去查看和了解的內(nèi)容。對于你貢獻(xiàn)的***個(gè)補(bǔ)丁的提交流程方面的更多內(nèi)容,請閱讀 KernelNewbies 的***個(gè)內(nèi)核補(bǔ)丁教程。
為內(nèi)核作貢獻(xiàn)
第 1 步:準(zhǔn)備你的系統(tǒng)。
本文開始之前,假設(shè)你的系統(tǒng)已經(jīng)具備了如下的工具:
- 文本編輯器
- Email 客戶端
- 版本控制系統(tǒng)(例如:git)
第 2 步:下載 Linux 內(nèi)核代碼倉庫。
git clone -b staging-testing
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
復(fù)制你的當(dāng)前配置:
cp /boot/config-`uname -r`* .config
第 3 步:構(gòu)建/安裝你的內(nèi)核。
make -jX
sudo make modules_install install
第 4 步:創(chuàng)建一個(gè)分支并切換到該分支。
git checkout -b first-patch
第 5 步:更新你的內(nèi)核并指向到***的代碼。
git fetch origin
git rebase origin/staging-testing
第 6 步:在***的代碼庫上產(chǎn)生一個(gè)變更。
使用 make
命令重新編譯,確保你的變更沒有錯(cuò)誤。
第 7 步:提交你的變更并創(chuàng)建一個(gè)補(bǔ)丁。
git add <file>
git commit -s -v
git format-patch -o /tmp/ HEAD^
主題是由冒號分隔的文件名組成,跟著是使用祈使語態(tài)來描述補(bǔ)丁做了什么??招兄笫菑?qiáng)制的 signed off
標(biāo)記,***是你的補(bǔ)丁的 diff
信息。
下面是另外一個(gè)簡單補(bǔ)丁的示例:
接下來,從命令行使用郵件(在本例子中使用的是 Mutt)發(fā)送這個(gè)補(bǔ)?。?/p>
mutt -H /tmp/0001-<whatever your filename is>
使用 get_maintainer.pl 腳本,去了解你的補(bǔ)丁應(yīng)該發(fā)送給哪位維護(hù)者的列表。
提交你的***個(gè)補(bǔ)丁之前,你應(yīng)該知道的事情
- Greg Kroah-Hartman 的 staging tree 是提交你的 ***個(gè)補(bǔ)丁 的***的地方,因?yàn)樗菀捉邮苄仑暙I(xiàn)者的補(bǔ)丁。在你熟悉了補(bǔ)丁發(fā)送流程以后,你就可以去發(fā)送復(fù)雜度更高的子系統(tǒng)專用的補(bǔ)丁。
- 你也可以從糾正代碼中的編碼風(fēng)格開始。想學(xué)習(xí)更多關(guān)于這方面的內(nèi)容,請閱讀 Linux 內(nèi)核編碼風(fēng)格文檔。
- checkpatch.pl 腳本可以幫你檢測編碼風(fēng)格方面的錯(cuò)誤。例如,運(yùn)行如下的命令:
perl scripts/checkpatch.pl -f drivers/staging/android/* | less
- 你可以去補(bǔ)全開發(fā)者留下的 TODO 注釋中未完成的內(nèi)容:
find drivers/staging -name TODO
- Coccinelle 是一個(gè)模式匹配的有用工具。
- 閱讀 歸檔的內(nèi)核郵件。
- 為找到靈感,你可以去遍歷 linux.git 日志去查看以前的作者的提交內(nèi)容。
-
注意:不要與你的補(bǔ)丁的審核者在郵件頂部交流!下面就是一個(gè)這樣的例子:
錯(cuò)誤的方式:
Chris,
Yes let’s schedule the meeting tomorrow, on the second floor.
> On Fri, Apr 26, 2013 at 9:25 AM, Chris wrote:
> Hey John, I had some questions:
> 1. Do you want to schedule the meeting tomorrow?
> 2. On which floor in the office?
> 3. What time is suitable to you?
(注意那***一個(gè)問題,在回復(fù)中無意中落下了。)
正確的方式:
Chris,
See my answers below...
> On Fri, Apr 26, 2013 at 9:25 AM, Chris wrote:
> Hey John, I had some questions:
> 1. Do you want to schedule the meeting tomorrow?
Yes tomorrow is fine.
> 2. On which floor in the office?
Let's keep it on the second floor.
> 3. What time is suitable to you?
09:00 am would be alright.
(所有問題全部回復(fù),并且這種方式還保存了閱讀的時(shí)間。)
-
Eudyptula challenge 是學(xué)習(xí)內(nèi)核基礎(chǔ)知識的非常好的方式。
想學(xué)習(xí)更多內(nèi)容,閱讀 KernelNewbies 的***個(gè)內(nèi)核補(bǔ)丁教程。之后如果你還有任何問題,可以在 kernelnewbies 郵件列表 或者 #kernelnewbies IRC channel 中提問。