I want to be a complete engineer - technical genius and sensitive humanist all in one!

Monday, December 1, 2008

与kernel同步,了解内核的变化

從事 Embedded Linux(GNU/Linux systems on devices)工作的朋友,除了日常的讀書功課外,另外一個重要的工作就是「隨時注意 Linux kernel 的發展狀況」。要能與 Linux kernel 的發展同步,嚴格來說,已經是一件吃重的工作了,不過還是可以列出幾個基本的工作原則如下:

1. 每天閱讀 linux-kernel 郵遞論壇(mailing-list)的「標題」。

2. 隨時上 kernel.org 看看最新釋出的 kernel 版本(或留意 linux-kernel-announce mailing-list)。

3. 閱讀釋出版本的 Changelog。

4. 不要與 git 系統的距離太遠,定時看看 git 系統,保持一定的「短距離」。

Mailing List

linux-kernel 上的 posts 每天的量大約在 200~350 篇左右,數量並不算少,要把每一篇都看過是不太可能的,因此以我自己的閱讀心態來說,我會建議以下的閱讀方式:

1. 看標題,如果是自己有興趣或正在留意的更新,我就會標記下來持續追蹤。

2. 如果有 Bugfix 的 patch 出現,我會看看這項修正的起因與原理,但為了不讓自己花費太多時間,如果我對這項 patch 的修正「原理」不甚熟悉,我便會跳過此 post。

以下是閱讀 linux-kernel list 必須知道的幾件事:

1. 如果有新的修正,第一時間都會發佈在此 list 上,並且標題的起頭一定是 "[PATCH n/m] subject" 這樣的格式。PATCH 表示這是一個 patch 的發佈,由於一個 patch 會以多篇 post 發佈,因此就用「n/m」來表示「這是第幾篇 patch,總共有幾篇。」,例如:

[PATCH 0/7] KVM: Kernel-based Virtual Machine
[PATCH 1/7] KVM: userspace interface
[PATCH 2/7] KVM: Intel virtual mode extensions definitions
[PATCH 3/7] KVM: kvm data structures
[PATCH 5/7] KVM: mmu virtualization
[PATCH 6/7] KVM: x86 emulator
[PATCH 7/7] KVM: plumbing

2. 不能在這裡詢問與 kernel 發展無關的問題,例如:工具的使用、系統設定、詢問是否有XXX驅動程式、請求協助測試等等,這些都是不能張貼的文章。另外,原本就該留意的非成文禮節一定要注意,像是 FAQ 能找到的東西,就不要去麻煩人家。

3. list 裡大部份都是 device driver 的討論,並且很多都是架構面或觀念面的討論與修正建議,所以當您參與討論時,千萬不要用「個人的主觀看法,或是沒有事實與理論根據」的角度發表意見;由於「觀念」的修正是 kernel 2.6 驅動程式的大討論方向,所以必須先把主題相關的東西先看懂看熟後再參與討論。

我要怎麼知道 kernel 更新了什麼東西?

這是一個時常被問到的問題,由於 kernel 的變動快速,因此 Jollen 在日前便寫了一篇「讓 kernel 常在我心:探討如何與 kernel 的發展同步」的日記,內容是大略介紹如何與 kernel 的發展同步(day-by-day)。

但是,如果並不是很需要每天去注意 kernel 的動態的話,只要在每個 kernel 穩定版(stable)釋出後去看 Changlog 就好了。特別是 kernel 2.6.1x 的更新項目(update)、臭蟲修正(big fix)、新的驅動程式與 filesystem 更是以可怕的「量」在 patch,特別是最近半年的 3 個 kernel 版本(2.6.17~19),變化量真是到了油門全開的狀態,所以每天看 kernel 會是沈重的負擔。

話說回來,改變是好事。期待的是,看著這麼多的改變與越來越多的新驅動程式加入,以及企業級(enterprise-class)功能的成熟,我們已經可以拿到越來越棒的「成熟」kernel 了。誠如 Linus 在 2.6.19 stable 釋出時的玩笑話「It's one of those rare 'perfect' kernels」。

言歸正傳,如果要 keep 新 kernel 做了什麼改變,或是了解「什麼功能在幾版的 kernel 才開始有」、「某些 bug 在幾版做修正」、「這個版本是否對理器架構面做修正」等,建議可以直接由 kernelnewbies.org 做查詢,例如,我想知道 kernel 2.6.17 改了什麼東西,就可以輸入以下的 URL:

http://kernelnewbies.org/Linux_2_6_17

同理,我想知道幾天前才丟出來的 kernel 2.6.19 加了什麼、改了什麼,就輸入以下的 URL:

http://kernelnewbies.org/Linux_2_6_19

就如前面提到的,kernel 2.6.1x 的修改變化相當大,特別是在 kernel 2.6.16(大約)後,每每都有重大更新,修正範圍也「波及」到「Kernel Core」。如果工作場合與 kernel 有關係,確實有必要仔細閱讀每一個版本的 Changelog。
files come from Jollen's Blog at http://www.jollen.org/blog/2006/11/reading_kernel_kernel_patch.html

1 comment:

Will Wang said...

這位大陸的朋友,如果要筆記Jollen的post,請附上來源,是一個比較好的作法。

Labels

Followers