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 <wanlong.gao@gmail.com>" --to "Artem ***<mail>" --cc "linux-kernel@vger.kernel.org" 0001-****

这样就发出去了,patch跟直接在linus tree上改的一样,这样也很方便,非常方便,免去了clone整个tree的麻烦,因为各个维护者的tree实在是太多了,要是都clone下来,还要每天在改之前pull一下,那就是一个e梦啊。这是一个不错的方法哦,哈哈。提patch的同学可以看看。

题外话,昨天39内核发布后,今天40的window一打开,疯子一样的一顿pull 啊,晚上回来更新了一下linus tree,更新了快两个M的代码,疯狂的kernel hackers。

嗯,写得差不多了吧,有点天马行空,看的将就看吧。

对了,昨天武大对方滨兴扔鞋真是大快人心啊,出了很多IT人的一口恶气啊。。。

2.6.39发布了-最近关于内核开发的一些感受

全文结束