天天看點

2.6.39釋出了-最近關于核心開發的一些感受

linux kernel 2.6.39終于釋出了,感覺從rc1到rc7,挺長時間了,這是一個值得紀念的核心版本。當然,隻是對于我而言,是值得紀念的一個核心版本,從39-rc1開始,決定正式參與核心的開發了,從剛開始不成熟地改了幾個format的錯誤,到後來改了幾處函數錯誤,再到後來為驅動核心寫了注釋,一點點進步了,也越來越專業了。可以說我為開源做貢獻之路是從39這個版本開始的,值得紀念。

其實感受之前也寫過,以前一直覺得核心是個神聖的東西,隻能每天以一種朝神的姿态去讀它,去讀懂它,從來沒想到過去改個一句半句的,想都不敢想,覺得那完全是不可能的事情,而這畢業後一年的工作時間,進步真的是太大了,在學校的時候,每天總是有這樣的事,那樣的事,有這樣的作業,那樣的作業,其實真正安心下來看代碼的時間不多,有時候容易浮燥,沒有大塊大塊的時間去研究一個東西,而在上班的這段時間裡,本來就做linux 驅動的工作,每天都是在做自己喜歡的事情,看自己喜歡的代碼,大塊大塊的時候,雖然有時也會被一些蛋疼的事情打斷,但是總體來說重心還是在這個上面。雖然有時間工作的内容有些簡單,畢竟有時候做驅動,隻是加一些board device,有時候或許看了好幾天的一個子產品,在改的時候就改幾行,或者改幾個參數就OK了,但是,重要的不是結果,不是這個裝置工作了,正常工作了,而是對這個裝置的了解,對這個驅動的了解,對driver core的了解,對linux kernel整個系統的了解。是以有時候,工作了一樣長的時間,做了一樣的一些工作,有做的好的,有做的不好的人。而且做了同樣的事情,人跟人得到的收獲也不一樣。

比如做一個簡單的按鍵的驅動,或者觸摸屏的驅動,可以按照前人加過的代碼,照着改一改,能工作了,OK,工作做完了,下次做的時候還是一樣的步驟。最後呢,這玩意是個啥,是怎麼工作起來的,不了了之,這樣反而會覺得工作沒有樂趣,沒有一點意思。

而相反,在這樣的裝置工作以後,你可以進一步看看它是怎麼樣工作的,驅動核心是怎麼樣把它們驅動起來的,輸入核心代碼是怎麼樣實作的,這樣的一層層的核心代碼是怎麼樣才讓你在寫一個裝置的驅動的時候如此簡單地就完成了工作?都了解了,在做别的輸入裝置驅動的時候,even在做其它裝置驅動的時候,也許就得心應手了,因為你了解了輸入核心,了解了驅動核心,久而久之,也許對整個系統也了如執掌了,完全可以做優化整個系統的工作了。

這是我的了解,在平時的工作中,我經常從做一個簡單子產品的時候盡量了解得深入一些,這反而增加了不少工作的樂趣。可喜可賀。

另外,在了解得深入的前提下,我覺得要有一顆為開源做貢獻的心,雖然有時候也會有私心,因為看着自己的patch被apply,也會有一些小小的虛榮心,成就感,當然這也是應該的,沒有自己心理上的滿足,沒有成就感就沒有動力。像前幾天在做關于nand flash驅動的時候,看了看mtd core,發現了一個問題,當時很興奮,那天晚上回來就馬上送出了一個patch,今天被apply了,哈哈。

以前總是會覺得,kernel那麼大,找出個錯誤多不容易啊,咋能那麼容易就提一個patch呢,其實很容易,在平時看它的時候,當然前提是要讀代碼,在讀的時候也許就發現錯誤了,在調試的時候也許就發現錯誤了,也許這個bug,你fix掉後就被采納了呢。

做核心開發,我覺得必須要有激情,有時候發現一個bug,我會弄到大半夜去提這個patch,有時候真是生怕被别人搶先fix掉了這個bug,這是一個充滿激情的地方,在郵件隊列裡,有的是不分日夜在那裡為核心送出patch的大牛們,要向他們學習,學習這種激情。

不知不覺,扯遠了,本來是想說說39核心的,昨天linus加了39的tag後,意味着39正式釋出了,然後還發了一個郵件說接下來兩周 要去日本參加活動,39不能再delay了,本想發個rc8的,還是先發個39,然後打開40的merge window吧,希望在回來前不會有大麻煩。就這樣,39就釋出了,聽起來并不是那麼的神聖吧,哈哈。

本來這個文章是想寫寫今天發patch的一個體會的,現在才開始寫,隻能當作PS了,哈哈。

前天發了一個關于drivers/mtd/mtdcore.c的patch,發了兩個,一個被apply了,一個沒有,Artem說第二個在他的l2 tree裡面merge不了,因為proc函數被别人重寫過了,我去他的tree看了一下,發現果然如此,我的patch是基于linus的tree發的,果然很過時,然後就想把他的l2 tree 給clone下來改一改再提個patch,但是clone一個tree實在是太費勁的,真是很不容易,于是我隻把那一個檔案拿了下來。然後:

1 mkdir temp_kernel
 2 
 3 cd temp_kernel
 4 
 5 git init
 6 
 7 mkdir -p drivers/mtd/
 8 
 9 cp mtdcore.c temp_kernel/drivers/mtd/
10 
11 git add *
12 
13 git commit -m "init"
14 
15 vi temp_kernel/drivers/mtd/mtdcore.c    #然後就是一頓改
16  
17 git diff      #看看改的有沒有問題
18  git commit -a    #寫點注釋
19  
20 git format-patch -s -1
21 
22 git send-email --from "Wanlong Gao <[email protected]>" --to "Artem ***<mail>" --cc "[email protected]" 0001-****
           
這樣就發出去了,patch跟直接在linus tree上改的一樣,這樣也很友善,非常友善,免去了clone整個tree的麻煩,因為各個維護者的tree實在是太多了,要是都clone下來,還要每天在改之前pull一下,那就是一個e夢啊。這是一個不錯的方法哦,哈哈。提patch的同學可以看看。

題外話,昨天39核心釋出後,今天40的window一打開,瘋子一樣的一頓pull 啊,晚上回來更新了一下linus tree,更新了快兩個M的代碼,瘋狂的kernel hackers。

嗯,寫得差不多了吧,有點天馬行空,看的将就看吧。

對了,昨天武大對方濱興扔鞋真是大快人心啊,出了很多IT人的一口惡氣啊。。。

繼續閱讀