如何学习内核

一、Linux内核学习经验

1. 内核学习的心理误区
心理上的问题主要有两个,一个是盲目,就是在能够熟练使用Linux之前,对Linux为何物还说不出个道道

来,就迫不及待的盲目的去研究内核的源代码。重述Linus的那句话:要先会使用它。

第二个就是恐惧。人类进化这么多年,面对复杂的物体和事情还是总会有天生的惧怕感,体现在内核学习

上面就是:那么庞大复杂的内核代码,让人面对起来该情何以堪啊!有了这种恐惧无力感存在,心理上就

会去排斥面对接触内核源码,宁愿去抱着情景分析,搜集各种各样五花八门的内核书籍放在那里屯着,看

了又忘,忘了又看,也不大情愿去认真细致得浏览源码。

2. 学习内核就是学习内核的源代码
学习内核,就是学习内核的源代码,任何内核有关的书籍都是基于内核,而又不高于内核的。内核源码本

身就是最好的参考资料,其他任何经典或非经典的书最多只是起到个辅助作用,不能也不应该取代内核代

码在我们学习过程中的主导地位。

3. 要抱着严谨细致的态度分析内核源码
既然要学习内核源码,就要经常对内核代码进行分析,而内核代码千千万,还前仆后继的不断往里加,这

就让大部分人都有种雾里看花花不见的无助感。不过不要怕,孔老夫子早就留给我们了应对之策:敏于事

而慎于言,就有道而正焉,可谓好学也已。这就是说,做事要踏实才是好学生好同志,要遵循严谨的态度

,去理解每一段代码的实现,多问多想多记。如果抱着走马观花,得过且过的态度,结果极有可能就是一

边看一边丢,没有多大的收获。
只要你使用这样的态度开始分析内核,那么无论你选择内核的哪个部分作为切入点,比如USB,比如进程

管理,在花费相对不算很多的时间之后,你就会发现你对内核的理解会上升到另外一个高度,一个抱着情

景分析,抱着0.1内核完全注释,抱着各种各样的内核书籍翻来覆去的看很多遍又忘很多遍都无法达到的

高度。


4. 通过Kconfig与Makefile定位目标代码
毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux内核中每

一个目录下边都会有一个 Kconfig文件和一个Makefile文件。 对于一个希望能够在Linux内核的汪洋代码

里看到一丝曙光的人来说,将它们放在怎么重要的地位都不过分。
Kconfig和Makefile就是Linux Kernel迷宫里的地图。地图引导我们去认识一个城市,而Kconfig和

Makefile则可以让我们了解一个Kernel目录下面的结构。我们每次浏览kernel寻找属于自己的那一段代码

时,都应该首先看看目录下的这两个文件。就像利用地图寻找目的地一样,我们需要利用Kconfig和

Makefile来寻找所要研究的目标代码。

二、学习内核需要什么基础知识?

(1)需要掌握操作系统理论的最初级的知识。
不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时

(real-time)的区别是什么,进程是个什么东西,CPU和系统总线、内存的关系(很粗略即可),等等。

(2)熟练使用C语言。
不需要已经很精通C语言,只要能熟练编写C程序,能看懂链表、散列表等数据结构的C实现,用过gcc编译

器,就可以了。当然,如果已经精通C语言显然是大占便宜的。

(3)了解CPU的相关知识,

译 者 序 当着手翻译这本书时,我不由得回想起开始接触Linux的那段日子。 几年前,我们拿到Linux内核代码开始研究时,可以说茫然无措。其规模之大,叫“覆压三百余里,隔 离天日”似乎不为过;其关系错综复杂,叫“廊腰缦回,檐牙高啄,各抱地势,勾心斗角”也不言过其实; 阿房宫在规模和结构上给人的震撼,可能与Linux有异曲同工之妙。“楚人一炬,可怜焦土”,可能正是因 为它的结构和规模,阿房宫在中国两千多年盛极的封建历史中终于没有再现,只能叫后人扼腕叹息;但是, Linux却实实在在的矗立在我们面前,当我们徘徊在这宏伟宫殿之前时,或许,我们也需要火炬——不是用 来毁灭,而是为了照亮勇者脚下的征途。 Linus Torvalds在我们面前展现的Linux魔法卷轴,让我们的视野进入一个自由而开放的新世界。自由 意味着自我价值的实现,开放代表着团结协作的理想,这对于从没把握过核心操作系统的中国人来说,无 疑点燃起了心中的梦想。于是,许多人毫不犹豫地走进来了,希望深入到那散发自由光彩、由众人团结协力 搭造起的殿堂。但是很快,不少人退缩了。面对这样一个汪洋大海,有的人迷惑了,出海的航道在哪里?有 的人倒下了,漫漫征途何时是尽头?我常常想,如果那时他们手中就有这本书的话… Daniel P.Bovet和Marco Cesati携手,为我们打造了这本鸿篇巨著,自此我们有了火把,有了航海图, 于是我们就有了彼岸,有了航道,也有了补给码头。不是吗,中断虽繁,但第四、六两章切中肯綮地剖析, 肯定能让你神清气爽;内存管理虽难,但多达三章细致入微的说理,一定会让你茅斯顿开。而内容的组织更 是别具匠心,每章开始部分一般性原理的描述,打破知识的局限,将每个部分的全景展现在你面前。而针对 每个知识点,落到实处的独到分析,又会使你沉迷于知识的融会贯通之中。第三版对Linux2.6的全面描述, 会使你为2.4与2.6之间的沟壑而感叹,但请放心,你曾从Linux旧版本获取的点滴依然是你前进的基石。总 之,你面对的不再是赤裸裸的代码,而是真正能雅俗共赏的艺术。 对整个Linux社区来说,这绝不是微末的贡献而已,连Andre Morton都已经指出:“内核学习曲线 变得越来越长,也越来越陡峭。系统规模不断扩大,复杂程度不断提高。长此以往,虽然现在这一拨内核开 发者对内核的掌握越发炉火纯青,但却会造成新手无法跟上内核发展步伐,出现青黄不接的断层”。而这本 书的目的,无疑于此吻合。按照这本书指明的道路,我们可以躲过暗礁,绕过险滩,穿过逆流,勇往直前。 这也是为什么这本书总在Linux书籍排行榜中稳居前列的原因之一。 不过,除非行动,否则地图再好,也不会让人向自己的目标迈进半步。所以,在读书的同时,你还一定 要亲身实践:理解内核某部分的捷径就是对它做些修改,这样你才能越过代码本身看到内核深层机理。 Linux是一个全新的世界,世界意味着博大精深,而新或许代表对旧的割舍和扬弃,加在一起,就是要 我们在割舍和扬弃的同时还要积累知识到博大精深的地步,这容易做到吗?是的,这不容易做到。Gerald M. Weinberg在《Becoming a Technical Leader: An Organic Problem-Solving Approach》一书中总结成长为高 原-低谷模式:“成长是跳跃式的,要经过量的积累,在积累的过程中,往往要伴随着扬弃,所以常常会跌 入低谷”。面对Linux这个需要长期孜孜以求的学习对象,无疑这种震荡会加重我们的疑虑,降低我们的信 心,消磨我们的意志,使我们轻易的认为达到了自己的成长上限。 根据我们的经验,这需要系统思考来改变心智模式,最好有一个学习型组织来提供帮助:团队是学习 的最佳单位。(可以参看彼得.圣吉的《第五项修炼》,这本书值得有心改变自己,并进而改善周围世界的人一 读再读)所以,我们希望结合这本《深入理解Linux内核》,创造这样的一个氛围,一种环境。为此在 www.KernelTravel.net 建立了中文网站“内核之旅”,不但有一些有价值的资料,而且我们会把这些资料按 照学习路径组织起来,让它们真正伴随内核学习者前进。 阅读本书,需要一份耐心,更需要一份执着。当你闯过一道道难关,阅读到本书的最后一章时,会有“ 蓦然回首,那人却在灯火阑珊处”的感觉!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值