对于Linux内核的初学者,学习内核的曲线是非常陡峭的。想要短时间掌握内核是非常困难的。对于大多数学习内核的人来说学习内核最大的问题应该是缺乏学习路线。我也是内核的初学者,尽管水平低微但还是有一些心得的,现讲一下我对学习内核的一点想法。
第一从最简单的内核入手开始学习:
学习内核的第一步绝对不是一开始就去读比较新的内核,在你对内核没有整体把握的时候读内核源码完全是浪费时间你几乎不太可能理解它,除非你本身就是专家。内核作为一个操作系统处于上层应用和底层硬件之间,因为对内核的要求是第一可以正常工作,第二可以高效工作。要完成第一步就必须依靠底层硬件完成一个操作系统最基本的功能:完成boot掌控CPU,初始化硬件,基本的输入输出,基本的中断处理,进程调度和内存分配,开放shell给用户。这是一个操作系统的最小实现,第二个部分是内核的强化,linux之所以强大在于它各种子系统的算法和之间的相互作用,使其达到较高的执行效率,能够应对各种复杂的情况,内核的庞大即来源于此。给内核来个公式那就是:
linux内核=平台操作系统最小实现+策略
第一部分是高度硬件相关的,不同的平台实现不同,第二部分则跟架构相关性较小。
根据这个公式初学者应该怎样学习linux呢?肯定要一步一步来,先学第一部分,操作系统最小实现,因此学习内核的第一步应该是去读0.11Linux源码,这个可以称得上是linux的最小实现,linus当年自己写的,国内有两本书讲解比较好,《Linux内核完全剖析》和《Linux内核设计艺术》因为0.11内核是基于x86的,需要你对x86汇编有基础,可以参考王爽的《汇编语言》当然还要对x86架构有基本的认识,在书中都有清楚的讲解,不要怕繁琐,对于初学者基础要一点一点来。当然要对照源码一起看。
如果你能完全或基本上看懂Linux0.11内核基本上你就可以理解一个完整的内核是怎么工作的了,从上电启动一直到内核启动成功,以及内核中比较重要的各个子系统之间的联系。
第二,这时候你可以看一些大部头的内核书了,比如《Linux内核情景分析》我觉得是所有内核书中讲的最好的,虽然有点过时,而且特别厚,但讲解的非常到位非常流畅,相较于翻译的内核书是非常不错的,本书已经绝版,有非常清晰的电子书,建议读电子版。还有两本《深入Linux内核架构》《深入理解Linux》基于2.6内核,当然只要选一本看就行了,然后有问题可以参照《linux内核情景分析》。如果要学习驱动编写那就得看看《Linux设备驱动程序》这个时候最好能对照比较新的内核源码去看了。
第三实践,参与社区,如果你已经通过前两关,基本你已经对内核有了较为整体的了解了,但是指望看基本书就能成为内核高手显然那是奢望。要成为高手跟大牛交流是必不可少的,Linux内核社区是非常活跃的,参与社区讨论,使用调试贡献内核代码是让你成为内核专家的必经之路。
912

被折叠的 条评论
为什么被折叠?



