1. 程式人生 > >《Linux核心設計與實現》讀書筆記(二十)- 補丁, 開發和社群

《Linux核心設計與實現》讀書筆記(二十)- 補丁, 開發和社群

linux最吸引我的地方之一就是它擁有一個高手雲集的社群, 還有就是如果能=為linux核心中貢獻程式碼, 一定是一件令人自豪的事情.

下面主要總結一些和貢獻程式碼相關的主要內容.

  • 加入社群
  • 編碼風格
  • 提交補丁
  • 總結

1. 加入社群

如果想為linux貢獻程式碼, 那麼加入linux社群是必須的, 加入了社群, 不僅可以及時核心的最新訊息, 而且可以及時和社群內有經驗的核心開發者交流經驗.

同時也是提交程式碼和討論程式碼的地方, 瞭解社群的規則, 融入社群環境之中, 才能更好的學習核心, 體會核心開發的樂趣和成就感.

核心社群說白了就是核心郵件列表(LKML linux kernel mail list)

除了郵件列表之外, 還有2個本書作者推薦的網站也適合linux核心新手去關注:

2. 編碼風格

社群給我們提供了學習和貢獻核心的地方, 但是為了避免不必要的麻煩(被別人指責或者無人理睬), 首先得好好了解一些核心程式碼的編碼風格.

linux的編碼風格都記錄在 Documentation/CodingStyle 核心開發前要好好研讀以下, 之後有時間我會整理到部落格中.

3. 提交補丁

準備工作都完成之後, 就可以開始核心開發之旅了 :)

只要堅持不斷的學習和嘗試, 總有一天會為了核心貢獻自己的程式碼, 這時候, 就需要了解如何提交程式碼, 也就是核心補丁.

如果是發現了BUG或者有改善, 可以將BUG的描述或者改善程式碼傳送給對應的維護者.(核心各個子系統的維護者資訊在核心程式碼根目錄下的 MAINTAINERS 檔案中)

生成BUG或者改善程式碼的補丁有2種方法:

1. 用diff命令建立補丁

# 生成patch
diff -urN linux-old/ linux-new/ > my-patch  # 比對整個核心程式碼資料夾
OR
diff -u linux-old/some/file linux-new/some/file > my-patch  # 比對某個檔案

# 應用patch, 應用了patch之後, linux
-old 和 linux-new 中的程式碼就一樣了 cd linux-old patch -p1 < ../my-patch # 這個命令是進入linux核心程式碼根目錄內執行的 # PS. 還有個很有用的工具 diffstat diffstat -p1 my-patch # 列出補丁所引起的變更的統計(加入或移去的程式碼行)

2. 用git命令建立補丁

# 提交修改的或新增的程式碼
git commit -a   # 提交所有修改的程式碼
OR
git commit linux-src/some/file.c  # 提交某個修改的程式碼
OR
git add linux-src/some/new-file.c   # 把新增的檔案加入版本庫
git commit -a       # 提交新增的檔案

# 生成patch
git format-patch -N  # N 是正整數, 這條命令生成最後N次提交產生的補丁
OR
git format-patch -1  # 最後1次提交產生的補丁

# 應用patch: 和第一種方法一樣

4. 總結

本章的內容都是和提交核心patch有關, 我還是核心的入門者, 沒有社群的經驗, 更別說提交核心patch的經驗了.

這篇筆記只是簡單記錄一些對入門者有用的資訊, 便於以後檢視.