红联Linux门户
Linux帮助

Linux内核修炼之道

发布时间:2010-03-01 22:40:14来源:红联作者:ilaff
转自blog.csdn.net/fudan_abc

下面是前言哈,写的太牛了~

至此落笔之际,恰至Linux问世18周年,18年的成长,如梦似幻,风雨颇多,感慨颇多。

犹自忆起多年以前一位前辈训导时的箴言:今天的必然正是由之前一系列的偶然所决定的。过去的某年某月,我偶然初识Linux就身陷其中,至今仍找不到出去的路,而正是这次乃至之后的多次偶然相联合,从而决定了今日的我要在此写下这些话。那么,当您偶然地拿起这本书,偶然地看到这段话,您是否会问自己:这样的偶然又会导致什么样的必然?

如果您依然决定继续这次的偶然之旅,那么首先请认识两个人,准确的说是一个人和一只企鹅。这个人自然就是Linus Torvalds,我们也可是称他为Linus或李纳斯,正是这位来自芬兰的天才,在1991年1月2日,攥着在圣诞节和生日得到的钱,偶然地做出了一个重大的财政决定,分期三年买一台价格3500美元得相貌平平得计算机,从而Linux开始了。

企鹅则是Linux的标志,很多人可能不知道Linus,但是却可能知道这只企鹅,这是一个奇怪的现象,就像很多人知道微软,却不知道比尔盖茨。不管怎么说,是Linus塑造了这只企鹅,并让它有一副爽透了的样子,就像刚刚吞下一扎啤酒。除此之外,这只企鹅还要很特别,其他的企鹅都是黑嘴巴黑脚蹼,但它却是黄嘴巴黄脚蹼,这使它看上去好像是鸭子与企鹅的杂交品种,也许它是唐老鸭在南极之旅中与一只当地企鹅一夜倾情的结晶。

其次,在您继续之前,我还想请您问自己一个问题:我在强迫自己学习内核么?我很希望您能回答不是,但希望与现实往往都有段不小的距离,因为很多时候,我都发现身边的人是因为觉得内核很高深而强迫自己喜欢的。强迫自己去喜欢一个人是多么痛苦的事情。或许,针对这个问题,最让人愉悦的回答是“说实话,我学习的热情从来都没有低落过。”正如Linus在自己的自传《Just for Fun》中希望的那样。


本书的组织形式

本书将Linux内核的学习分为四个层次:全面了解,掌握基本功;兴趣导向,选择重点深度钻研;融入社区,参与开发做贡献;坚持,坚持,再坚持。总结起来,就是“全面了解抓基本,兴趣导向深钻研;融入社区做贡献,坚持坚持再坚持。”(如果您是一个修真小说爱好者,尽可以将其与炼气、筑基、结丹和元婴等层次相对应。)

第一层次修炼的内容包括了前三章,目的是希望您能够对Linux以及内核有个全面的认识和了解,掌握分析Linux内核源代码的分析方法。

第1章主要介绍了Linux的18年成长史,或许您会乐意陪我一起缅怀下这过去的十八年。

第2章介绍内核的配置和编译过程,和任何大型软件源码的学习一样,学会编译和配置是第一步。

第3章介绍学习内核需要的基础,内核的体系结构、目录结构、代码特点,浏览内核代码的工具,最后,突出强调了内核源码分析过程中极为重要的两个角色----Kconfig和Makefile,并以USB子系统为例,演示了如何利用这两个角色进行代码分析。


第二层次的修炼包括了第4~11章的内容,对内核多数部分的工作原理进行介绍。按照认识的发展规律,在第一层次修炼中已经对内核有个全局的认识和了解之后,接下来就应该以兴趣为导向,寻找一个子系统或模块,对其代码深入钻研和分析,不懂的地方就通过社区、邮件列表或者直接发Email给 maintainer请教等途径弄懂,切勿得过且过,这样分析下来,对同步、中断等等内核的很多机制也同样会非常了解,俗话说一通则百通就是这个道理。

因此第二层次的各个章节里,只是阐释重点的概念和工作原理,帮助您在分析该部分代码时进行理解,并不求详尽。

第4章讨论系统的初始化,万事开头难,系统的初始化是一个很复杂的过程,不过对于内核源码的学习来说,以这个部分开始应该是个不错的选择。特别是子系统初始化的讨论,应该是您选择任何内核子系统开始分析时都需要了解的内容。

第5章讨论系统调用,它是应用程序和内核间的桥梁,学习并理解它是我们走向内核的一个很好的过渡。

第6章讨论内核的中断处理机制,包括几乎任何一本内核书籍都没有涉及的通用IRQ层。

第7章讨论进程的内核抽象,以及进程如何被创建和销毁。如果我们将计算机上运行的操作系统以及各种各样的软件看作一系列有机的生命体,而不是死的指令集合,那么这就是一个进程的世界,只不过与我们人类世界不同的是,进程世界里的个体是一个一个鲜活的进程,而不是人。人的世界有道德与法律去制约管理,进程的世界同样也有自己的管理机制,这就是第7章所要展示的内容----进程管理。

第8章讨论进程的调度,重点讨论了在内核历史上具有重要地位的O(1)调度器和最新的CFS调度起。

第9章讨论内存管理,内存就是进程的家,这里讨论内核如何为每个进程都分配一个家,并尽量的去做到“居者有其屋”,以及保证每个家的安全。

第10章讨论文件系统,主要是虚拟文件系统(VFS),它通过在各种具体的文件系统之上建立一个抽象层,屏蔽了不同文件系统间的差异。

第11章讨论设备驱动,对于驱动开发来说,设备模型的理解是根本,spec、datasheet与内核源代码的利用是关键。
通过第二层次的修炼,您应该对至少一到两个部分有了很深入的理解,对内核代码采用的通用手法也已经很拈熟,那么您应该开始进入第三层次,努力融入到内核的开发社区,此时的您已经不会再是社区中潜水小白的角色,而是会针对某个问题发表自己的见解。您已经可以尝试参与到内核的开发中去,即使仅仅修改了内核中的一个错误单词,翻译了一份大家需要的文档,也是做出了自己的贡献,会得到大家的认可。
本书中第三层次只包括了两章的内容,这是因为内核的修炼之道越往后便越依赖于自己,任何参考书都替代不了自己不断的反思与总结。

第12章讨论参与内核开发需要了解的一些基础信息。

第13章讨论了内核的调试技术,与第12章一样,您可以仅仅将这些内容看成内核修炼中的一些tips。

至于最后的第四层次,更是仅有两个字----坚持。能够在内核的修炼之道上走多远,都取决于我们能够坚持多久,或许一个用一个公式概括更为合适:心态+兴趣+激情+时间+X=Y。

革命尚未成功,我等仍需努力。----与君共勉之。

……
文章评论

共有 16 条评论

  1. btiger2000 于 2011-08-25 23:06:06发表:

    前面写的很有文采,但是具体到内容还是得枯燥的讲

  2. chaipeng 于 2011-08-19 11:39:39发表:

    就??被你征服!!!!!

  3. hatason1978 于 2011-03-11 10:52:41发表:

    多谢

  4. pengdekai5 于 2010-09-22 06:50:57发表:

    太虚了。。。

  5. lyanxia28 于 2010-08-19 08:46:57发表:

    牛!

  6. GrassRoot 于 2010-08-15 01:05:25发表:

    谢谢分享,有没有电子档下载哪?

  7. makaayxjtu 于 2010-08-07 00:34:07发表:

    在书店无意间翻到这本书,还是校友写的,大牛一个
    一定要顶。

  8. yeqishi 于 2010-04-29 14:51:51发表:

    好东西,学习了

  9. shen.yhx 于 2010-04-27 23:29:28发表:

    完了?

  10. 47568203 于 2010-04-06 12:37:05发表:

    谢谢分享

  11. 47568203 于 2010-04-06 12:33:25发表:

    谢谢分享

  12. ilaff 于 2010-03-05 09:44:55发表:

    Ubuntu 4.10

    2003年
    1月,NEC宣布将在其手机中使用Linux,代表着Linux成功进军手机领域。
    6月,IDC分析师称,2003年Linux服务器在西欧的销售量将达到18.2万台,到2007年,销售量将增至这个数字的三倍,销售收入将翻一番,达到19亿美元。
    8月,韩国国家航空公司和IBM联合发布声明,表示韩国航空公司将把该公司的核心业务移植到IBM的eServer服务器当中完成,其中操作系统则采用Linux。
    9月,三星在推出了首款基于Linux系统平台的CDMA智能手机SCH-i519。
    11月,Linux 2.6发布,它被认为是第一款真正意义上的企业级内核,这是Linux内核从2001年以来第一次的大改动。
    这一年,我第一次在电视直播里看着自己喜欢的米兰夺得了冠军杯。

    2004年
    1月,X.Org基金会成立。
    2月,Linux标准2.0出台,规范了所有能被称为Linux操作系统所应该有的特性。
    5月,基于Linux的路由系统出现。
    10月20日,Ubuntu 首个版本发布,在五年后的今天Ubuntu已经是Linux桌面发行版的一个成功典范。
    11月,Firefox 1.0发布,它成为大众关注的焦点,IE降低了1个点的市场份额----像这种事已经多年没有发生过了。Firefox已经成为了微软IE的强有力的对手。
    又到了找工作的季节,宣讲会、笔试、面试,我就要离开学校了么?

    2005年
    10月,Firefox的下载量突破了1亿大关,这表明,只要产品好,开放源代码软件也能够获得普通用户的青睐。
    11月,Sun开放了除Java之外的几乎所有软件,这使得它在一夜间成为了最大的开放源码软件厂商之一。
    12月,Red Hat公布了第三季度业报,销售收入增长了43.6%,利润增长了114%。
    这一年夏天,遭遇了到目前为止最为严重的一次失窃,除了IQ卡,所有的卡都随着钱夹子消失了,到工行补办牡丹卡时,那慵懒的上海女人说,必须要上海土生土长的本地人来担保,仅仅拥有上海户口的人是不行的。

    Richard Stallman的征婚启事

    2006年
    6月,自由软件之父Richard Stallman在自己的网站http://www.stallman.org/ 上发布了一则“征婚启事”。
    I'm a single atheist white man, 52, reputedly intelligent, with unusual interests in politics, science, music and dance.

    I'd like to meet a woman with varied interests, curious about the world, comfortable expressing her likes and dislikes (I hate struggling to guess), delighting in her ability to fascinate a man and in being loved tenderly, who values joy, truth, beauty and justice more than "success"--so we can share bouts of intense, passionately kind awareness of each other, alternating with tolerant warmth while we're absorbed in other aspects of life.

    My 22-year-old child, the Free Software Movement, occupies most of my life, leaving no room for more children, but I still have room to love a sweetheart. I spend a lot of my time traveling to give speeches, often to Europe, Asia and Latin America; it would be nice if you were free to travel with me some of the time.

    If you are interested, write to rms at stallman dot org and we'll see where it leads.

    我,单身,无神论者,白人,52岁,据说比较聪明,对于政治、科学、音乐和舞蹈有着不同寻常的兴趣。

    我想寻找这样一位女士:爱好广泛,对世界充满好奇心,能够清晰表达她的爱憎(我痛恨动脑筋猜测),乐于使男人着迷,渴望被温柔地爱,对于快乐、真理、美和正义的评价高于“成功”。这样的话,我们就能不断对另一方产生热烈而又美好的了解,当我们被生活中其他东西吸引的时候,彼此就能感到宽容的温暖。

    我有一个22岁的孩子----自由软件运动----他占据了我大部分的生活,没有精力再抚养更多的孩子了,但是我仍然会投入的爱我的爱人。我

    有大量时间花在巡回演讲上,经常要去欧洲、亚洲和拉丁美洲。如果你有空在某些时间陪我一起旅行,那就最好了。

    如果你有兴趣的话,请写信到 rms@stallman.org ,让我们看看会有什么结果。
    7月,Ubuntu被授予PC World 2006 World Class Award,证明了Ubuntu成为2006年世界最好的100个产品之一。Ubuntu越来越显示出他的不凡实力,虽说他是免费的,但是后台却是商业公司Canonical,加上太空人老板的聪明才智,逐渐的开始商业合作,比如和Sun合作,对有需要的客户提供Linux支持服务。
    8月,Linux业界另外一位狂人,Linuspire公司总裁Kevin Carmony宣布推出免费版本的Freespire 1.0,该版本中附带有二进制的商业硬件驱动程序,在Linux社区中引起轩然大波。27日,网站http://linux.inet.hr/poll_filesystem.html 上推出“Your favorite file system?”(你最喜欢的文件系统?)投票活动。
    9月,16日是“国际软件自由日”(SFD,Software Freedom Day 2006)。
    10月,Oracle Unbreakable Linux发布,Oralce成为第一个推出自有Linux服务的非操作系统软件厂商。17日,FSG(自由标准组,一个非赢利的致力于开发和促进自由开放软件的标准的组织)宣布与O'Reilly Media合作,共同为Linux应用程序开发人员提供类似MSDN的服务,该服务将作为LSB (Linux Standard Base) Developer Network的一个组成部分。
    11月,微软和Novell达成一揽子协议,号称要改善Linux和微软操作系统的兼容问题。看着昔日的对手用“+”连起来是否会觉得古怪?

    微软 + Novell

    这一年,三次去青岛,回来时遭遇三次严重的飞机晚点,让我疑惑这个世界怎么了?

  13. aaronpeach 于 2010-03-03 23:22:02发表:

    谢谢分享!

  14. ilaff 于 2010-03-03 19:00:20发表:

    提前发生的革命

    1999年
    1月,“Linux 2.2已经发布,我终于可以松口气了”创造者Linus Torvalds说。
    3月,首届LinuxWorld讨论会和博览会在加洲的圣何塞举行,作为Linux第一个大的商业化的贸易展示活动,它无疑向世界昭示了Linux的到来。
    8月,SG宣布了与Red Hat的合作关系,并且开始大规模的为内核的发展做贡献。Red Hat进行了首次公开募股,股价马上涨到了50美元,在那个时候这个价似乎很高。摩托罗拉公司与Lineo建立了合作关系,进入Linux领域并提供嵌入式系统产品,支持和培训服务。Sun宣布了在Sun公共源许可(Sun Community Source License)下发行StarOffice和开发一个网络版本的办公套件。
    9月,Red Hat的股票达到了135美元,这个价格在那个时候似乎是难以置信的高。
    10月,Sun宣布它将在Sun 公共源许可下公布Solaris的源代码。
    12月,VA Linux Systems的首次公开募股价格是30美元/股,这个价格很快涨到了300美元,它在NASDAQ历史上创造了最高的首次公开募股价格。
    这一年,网络进入了宿舍,QQ、mud等也进入了我们的生活。

    2000年
    1月,VA Linux Systems宣布创建我们非常熟悉的SourceForge,到这年底,SourceForge已经接到了超过12000个项目,拥有92000个注册的开发者。
    2月,最近的IDC 报告显示Linux现在成为“服务器电脑上第二个最受欢迎的操作系统”,在1999年占了25%的服务器操作系统销售额,Windows NT为38%,占第一位,NetWare为19%,排名第三,IDC以前曾预测过Linux将在2002或2003年到达第2位,这场革命提前发生了。
    3月,嵌入式Linux协会(Embedded Linux Consortium)成立。
    8月,HP、Intel、IBM以及NEC宣布开放源代码发展实验室(OSDL,Open Source Development Lab)成立。
    9月,Trolltech发布了GPL下的Qt库。
    11月,IBM宣布将在2001年投资10亿美元在Linux。首部基于Linux的手机IMT-2000在韩国发布。
    这一年的某一天,和同学坐在学校四大发明广场上观看同一首歌演出,困意盎然,期间那个粗犷的名歌星的一句话却惊醒了我:“希望你们交通大学为中国的交通事业做出更大的贡献”,大意如此,我顿时无语,他的语言竟然和他的外表一样粗犷。
    这一年的暑假,我第一次来到江南,在西湖断桥对面的饭馆里,透过落地窗恰恰看到湖里荷花的位置,要了份西湖醋鱼和一瓶啤酒,坐到下午四点钟,然后顺着苏堤白堤静静的走下去,直到绕湖一周再次回到断桥,已是晚上八点,坐在湖边的长凳上,一夜无语。

    和平、爱情和Linux

    2001年
    1月,期待已久的Linux 2.4发布。
    3月,Linux2.5内核高级会议在加州圣何塞举行,它或许是历史上Linux 内核hacker最完整的一次聚会。
    4月,IBM在几个城市鼓吹“和平、爱情和Linux”(Peace, Love and Linux)时遇到了麻烦。
    6月,Sharp宣布基于Lineo嵌入式系统的Linux PDA即将上市。
    这一年底,找工作的季节,我深刻认识了IT泡沫和9.11,找所谓的好工作无门和出国无门,我无奈选择考研。
    2002年
    Linus Torvalds将Linux 2.4交由巴西18岁的内核开发人员Marcelo Tosatti维护,自己则带领Linux 2.5的开发工作。
    这一年,我从一个交大到了另一个交大,这个转变似乎很平淡,并不深刻。

  15. ilaff 于 2010-03-02 12:41:36发表:

    [i=s] 本帖最后由 ilaff 于 2010-3-2 12:43 编辑 [/i]

    [align=center][b]Linux内核修炼之道 之 Linux史记[/b][/align]
    至此落笔之际,恰至Linux问世18周年,18年的成长,风雨颇多,感慨颇多,谨以这些许年来的点滴之事为Linux的成人礼添彩。

    如果你尚未与Linux亲密接触过,那么希望这里的内容可以成为你初识Linux的见证。如果你已经是个Linux达人,那么就选个安静的早晨,抑或下午,陪我一起缅怀下这过去的十八年吧。

    Linux诞生记

    1987年
    MINIX诞生,而我也已端坐于学堂之中,隐去一身的稚气,能够摇头晃脑的吟诵几句诗赋了。若真是冥冥中自有定数的话,或许这时就暗定了4年后Linux的诞生。

    1991年
    Linus Torvalds,一个芬兰的大学生,对于他不能按照意愿访问大学UNIX服务器而感到很愤怒,于是开始为一个以后被称为“Linux”的内核而工作,并于这一年的10月5日发布了Linux 0.01。

    1992年
    4月,第一个Linux新闻组“comp.os.linux”建立。10月,第一个可以安装的Linux版本SLS发布。同年,我拿到了平生的第一个毕业证。

    1993年
    8月,第一本关于Linux的著作《Linux Installation and Getting Started Version 1》出版。而这一年,我最敬佩的语文老师患病离去了,从此,我知道了生活中不仅仅只有欢聚,还有伤别。

    1994年
    Linux 1.0发布,并采用GPL(GNU General Public License,通用公共许可证)协议。大家要Linus Torvalds想一只吉祥物,Linus突然想到小时候去动物园被一只企鹅追着满地打滚,还被咬了一口!既然想不到其它的吉祥物了,干脆就以这支企鹅来当吉祥物算了!

    泰坦尼克的狂潮

    1995年
    4月,召开首届Linux博览会,一个以Linux为特征的商业展览博览会。几个月后,我迎来了第二个中学阶段。

    1996年
    Linux 2.0发布,它第一个支持了SMP(对称多处理器)架构。此时Linux的全球用户已经达到了350万左右。

    1997年
    首例Linux病毒“Bliss”被发现。电影《泰坦尼克号》所用的160台Alpha图形工作站中,有105台采用了Linux。

    1998年
    1月,第一份Linux新闻周刊出版,同时,Netscape宣布他们将在自由软件许可协议下发布浏览器的源代码,这为Linux和自由软件的发展提供了广阔空间。
    2月,Eric Raymond和他的朋友门提出了“open source”的概念,申请了该商标特权并且组建了opensource.org网站,从而开始推动Linux的商业化发展。
    4月,Linux广泛被美国国家公共新闻广播报道,标志Linux在主流、非技术性的媒体界首次出现。
    5月,Google搜索引擎开始流行,不仅仅是因为它是最好的搜索引擎,而且还因为它是基于Linux和具有Linux特色的搜索网页。
    6月,“从来没有一个用户向我提起Linux,Linux就像众多的免费产品一样,虽然它是很小的,却得到了一群忠诚的拥护者。”比尔盖茨在6月25日的《PC周刊》上说。
    7月,KDE和GNOME的桌面之争在其拥护者之间愈演愈烈,Linus以实际行动中表明KDE非常好用,在这种情况下,KDE1.0诞生了。Oracle、Informix、Sybase都宣布将积极支持Linux。Linux开始成为一个家喻户晓的词。
    9月,Dave Whitinge和Dwight Johnson创建了LinuxToday.com,该网站后来被Internet.com收购,不过它一直是访问量最高和最容易阅读的Linux入门网站。
    12月,一篇来自IDC的报导说Linux的发行量在1998年涨了200%以上,它的市场占有率也增加了150%以上。Linux拥有17%的市场占有率并且增长率超过了市场上其它任何一个系统。

    同年,我迎来了人生中一个非常重要的时刻:我上大学了!

  16. daixlon 于 2010-03-02 11:14:13发表:

    牛人