写给想我一样的Linux内核初学者

本文转自:http://www.zeuux.org/pipermail/zeuux-linux/2008-November/000060.html

[zeuux-linux] 写给想我一样的Linux内核初学者

Jianjun Kong   kongjianjun在gmail.com 
星期三 十一月 12 18:53:01 CST 2008

  • 上一条消息 [zeuux-linux] [speech]Greg Kroah Hartman on the Linux Kernel
  • 下一条消息 [zeuux-linux] [XiYouLinux] 写给想我一样的Linux内核初学者
  • 信息排序方式: [ 日期 ] [ 线索 ] [ 主题 ] [ 作者 ]
今天在小组大概讲了一下,自己学习内核的感受,总结了一下贴出来。欢迎任何评议 :)
_____________________________________________________

                         写给像我一样的Linux内核初学者

                                                         --孔建军(Kongove.CN)
                                                                     2008.11.12

首先,让我们来看几组令人振奋的数据。现在订阅Linux内核邮件列表[1],每天的邮件流
量大概在500份左右;执行"grep "^P:" MAINTAINERS |sort -u|wc -l",对内核子系统维
护者进行统计,得到的结果是534人;从2007到2008年,平均每天有4300行代码添加到内核
,有1800行代码从内核删除,有1500行代码被修改[2];内核2.6.27发布以后,内核开发者
使用脚本统计内核文件(包括空行、注释),已经超过10,000,000,000行[3]。那么,有多
少人读过内核源代码?又有多少人为内核开发做过贡献? ....

看到这些你或许有尝试一下的冲动,那就从现在开始疯狂的Hacking吧。下面是我自己学习
中的一些感受,只是一些学方法或建议,希望能对你有所帮助。

首先,得有具备一些基础知识,如C语言基础、数据结构、微机原理、网络基本原理、操作
系统、体系结构等,当然这也和你具体研究内容有关。下来就是习惯英语,尽管有很多优
秀的翻译资料供参考,尽管有很多出色的国内程序员活跃于邮件列表,但英语沟通是每个
内核开发人员无法绕过的一个槛。英语里丰富的专业词汇和广泛的使用群体,会成为沟通
的最佳选择。如果你的英语自认为不是很好,那么我或许能给你一些建议。平时经常查阅
man手册、wikipaid[4]等在线文档解决遇到的问题,参与合适的国外邮件列表,参与一些
英文交友社区(如Facebook等),交笔友、IRC频道及时聊天都是不错的方法。这些途径基
本上都是和技术沾边的,当然也有很多其他方法提高英语水平。

内核的学习,先得对整个有一个全面的认识,了解各个核心部分的工作原理。因为Linux内
核的工作是各个部分紧密配合完成的,各子系统之间的逻辑关系比较复杂。这里建议读一
些经典的书,如《Linux内核设计与实现》、《深入理解Linux内核(ULK)》,这样可以少走
弯路。这些书都有中文翻译,如果觉得直接看英文有些吃力,可以先看中文,或者中英文
对照着看。这些书都有好几个版本,针对2.4、2.6内核的都有,可以先看针对2.4版本的,
然后再看针对2.6的。这里不得不提一本清华的教材《Linux操作系统原理与应用》,这本
书非常适合入门,前面提到的ULK虽然涉及知识全面、讲的深入,但对于初学者往往会陷入
知识点的细节当中。这本教材把很多细枝末节省略掉,展现在读者面前的只有各部分的关
键知识块。同时有大量图片说明,搞懂这些图,也就理解了抽象的内部机制。其中每个章
节都附带一个代码实例,通过调试这些程序可以加深对知识的理解,把抽象的东西实例化
。你也可以在这本书作者维护的网站内核之旅[5]中,找到更多的实例代码和相关资料。当
然不排除有更好的入门教材,推荐这本只是我看过比较好的一本。

当你对内核已经有了一个初步的认识以后,你就需要围绕某一部分进行深入学习了。这样
才能有深入的研究,从而做出实用的东西出来。比如网络设备驱动、内存管理、文件系统
、内核调度、中断异常、内核同步等。这里还是得有经典教材的指导,如果你想搞驱动开
发,《Linux设备驱动》是必读的;如果你想深入内核的网络部分,《Linux网络设计与实
现》等等。

在学习内核过程中,源代码是最好的参考资料,你可以从Linux内核官网[6]下载最新的内
核源码,也可以选取交老的版本分块阅读。内核源码的阅读,难就难在整体的一个把握上
,所以建议大家先选取局部核心数据结构、代码、文件进行分析,如task_struct结构体、
fork.c文件等。在阅读源码的同时,结合一些较小的实例程序练习,从而真正理解源码。
在学习过程中如果遇到问题,最好现查看手头和网上的资料,实在解决不了,可以去邮件
列表(中文内核邮件列表[7])。

如果在学习内核的同时,你想尝试参与真正的Linux内核开发,请继续往下读。首先了解内
核开发的大牛,搞清楚Linus Torvalds, Andrew Morton, David Miller等主要维护者的工
作内容,如果你想作ARM方面的开发,你还得知道Russell King,你可以通过MAINTAINER文
件了解更多子系统的维护者,当然不是全部要了解。其次你得理解内核的命名规则,以及
如何制作和提交补丁。从而熟悉内核开发的现状和流程,更加有效的跟踪Linux内核开发,
同时坚定自己的信心。这样你的工作才能真正进入Linux内核当中。这里推荐一些资料,内
核文档(HOWTO、SubmittingPatches、SubmittingDrivers等,都可以从内核源码
Documentation目录下找到)、WangCong的内核讲座PPT[8]、Linux内核测试指南[9]。

你得学会利用内核Bug的跟踪系统Bugzilla[10]工作,学会使用Git版本控制工具,理解树
的概念。使用Git来跟踪内核的开发,关于Git的使用请阅读Git的帮助手册[11]。Git工具
、邮件列表等的使用,其实质是学会沟通,学会合作,学会高效工作。要时刻记着浪费别
人的时间就是谋财害命!

最后一点,也是最重要的一点,高度认真负责。这是参与开源社区最最关键的一点。

推荐另一篇必读的入门文章[12]。

[1] http://vger.kernel.org/vger-lists.html#linux-kernel
[2] http://www.heise-online.co.uk/open/Kernel-Log-More-than-10-million-lines-of-Linux-source-files--/news/111759
[3] http://www.youtube.com/watch?v=L2SED6sewRw
[4] http://en.wikipedia.org
[5] http://www.kerneltravel.net
[6] http://kernel.org
[7] http://wiki.zh-kernel.org/
[8] http://xiyoulinux.cn/speechdoc/kernelspeech-wangcong.ppt
[9] http://www.cnkernel.org/note/tester.tar.bz2.pdf (注意:是个压缩包,下载后把.pdf后缀去掉)
[10] http://bugzilla.kernel.org
[11] http://www.kernel.org/pub/software/scm/git/docs/
[12] http://xiyoulinux.cn/wiki/index.php?title=内核入门

-- 
Jianjun Kong @_@ Happy Hacking
Homepage: http://kongove.cn/
Gtalk: kongjianjun在gmail.com

  • 上一条消息 [zeuux-linux] [speech]Greg Kroah Hartman on the Linux Kernel
  • 下一条消息 [zeuux-linux] [XiYouLinux] 写给想我一样的Linux内核初学者
  • 信息排序方式: [ 日期 ] [ 线索 ] [ 主题 ] [ 作者 ]
关于邮件列表 zeuux-linux 的更多信息

你可能感兴趣的:(数据结构,linux,工作,git,documentation,linux内核)