首頁 > 軟體

如何提交你的第一個 Linux 核心修補程式

2020-06-16 16:43:50

學習如何做出你的首個 Linux 核心貢獻,以及在開始之前你應該知道什麼。

Linux 核心是最大且變動最快的開源專案之一,它由大約 53,600 個檔案和近 2,000 萬行程式碼組成。在全世界範圍內超過 15,600 位程式設計師為它貢獻程式碼,Linux 核心專案的維護者使用了如下的共同作業模型。

本文中,為了便於在 Linux 核心中提交你的第一個貢獻,我將為你提供一個必需的快速檢查列表,以告訴你在提交修補程式時,應該去檢視和了解的內容。對於你貢獻的第一個修補程式的提交流程方面的更多內容,請閱讀 KernelNewbies 的第一個核心修補程式教學

為核心作貢獻

第 1 步:準備你的系統。

本文開始之前,假設你的系統已經具備了如下的工具:

  • 文字編輯器
  • Email 用戶端
  • 版本控制系統(例如:git)

第 2 步:下載 Linux 核心程式碼倉庫。

  1. gitclone-b staging-testing
  2. git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git

複製你的當前設定:

  1. cp/boot/config-`uname -r`*.config

第 3 步:構建/安裝你的核心。

  1. make-jX
  2. sudomake modules_install install

第 4 步:建立一個分支並切換到該分支。

  1. git checkout -b first-patch

第 5 步:更新你的核心並指向到最新的程式碼。

  1. git fetch origin
  2. git rebase origin/staging-testing

第 6 步:在最新的程式碼庫上產生一個變更。

使用 make 命令重新編譯,確保你的變更沒有錯誤。

第 7 步:提交你的變更並建立一個修補程式。

  1. git add <file>
  2. git commit -s -v
  3. git format-patch-o /tmp/ HEAD^

主題是由冒號分隔的檔名組成,跟著是使用祈使語態來描述修補程式做了什麼。空行之後是強制的 signed off 標記,最後是你的修補程式的 diff 資訊。

下面是另外一個簡單修補程式的範例:

接下來,從命令列使用郵件(在本例子中使用的是 Mutt)傳送這個修補程式:

  1. mutt -H /tmp/0001-<whatever your filename is>

使用 get_maintainer.pl 指令碼,去了解你的修補程式應該傳送給哪位維護者的列表。

提交你的第一個修補程式之前,你應該知道的事情

  • Greg Kroah-Hartmanstaging tree 是提交你的 第一個修補程式 的最好的地方,因為他更容易接受新貢獻者的修補程式。在你熟悉了修補程式傳送流程以後,你就可以去傳送複雜度更高的子系統專用的修補程式。
  • 你也可以從糾正程式碼中的編碼風格開始。想學習更多關於這方面的內容,請閱讀 Linux 核心編碼風格文件
  • checkpatch.pl 指令碼可以幫你檢測編碼風格方面的錯誤。例如,執行如下的命令:perl scripts/checkpatch.pl -f drivers/staging/Android/* | less
  • 你可以去補全開發者留下的 TODO 注釋中未完成的內容:find drivers/staging -name TODO
  • Coccinelle 是一個模式匹配的有用工具。
  • 閱讀 歸檔的核心郵件
  • 為找到靈感,你可以去遍歷 linux.git 紀錄檔去檢視以前的作者的提交內容。
  • 注意:不要與你的修補程式的稽核者在郵件頂部交流!下面就是一個這樣的例子:

    錯誤的方式:

    1. Chris,
    2. Yes lets schedule the meeting tomorrow, on the second floor.
    3. >OnFri,Apr26,2013 at 9:25 AM,Chris wrote:
    4. >HeyJohn, I had some questions:
    5. >1.Do you want to schedule the meeting tomorrow?
    6. >2.On which floor in the office?
    7. >3.Whattimeis suitable to you?

    (注意那最後一個問題,在回復中無意中落下了。)

    正確的方式:

    1. Chris,
    2. Seemy answers below...
    3. >OnFri,Apr26,2013 at 9:25 AM,Chris wrote:
    4. >HeyJohn, I had some questions:
    5. >1.Do you want to schedule the meeting tomorrow?
    6. Yes tomorrow is fine.
    7. >2.On which floor in the office?
    8. Let's keep it on the second floor.
    9. > 3. What time is suitable to you?
    10. 09:00 am would be alright.

    (所有問題全部回復,並且這種方式還儲存了閱讀的時間。)

  • Eudyptula challenge 是學習核心基礎知識的非常好的方式。

想學習更多內容,閱讀 KernelNewbies 的第一個核心修補程式教學。之後如果你還有任何問題,可以在 kernelnewbies 郵寄清單 或者 #kernelnewbies IRC channel 中提問。


IT145.com E-mail:sddin#qq.com