经常有人问:我想学习内核,须要哪些基础吗?LinusTorvalds本人是这样回答的:你必须使用过Linux。这个……还是有点太泛了吧,我想下边几个基础可能还是须要的,虽然不一定必需:
1,关于操作系统理论的最中级的知识。不须要研读并理解《操作系统概念》《现代操作系统》等专著,但总要晓得分时(time-shared)和实时(real-time)的区别是哪些,进程是个哪些东西,CPU和系统总线、内存的关系(很简略即可),等等。
2,关于C语言。不须要已然很精通C语言,只要能熟练编撰C程序,能读懂数组、散列表等数据结构的C实现,用过gcc编译器linux设备驱动程序 东南大学出版社,就可以了。其实,假如早已精通C语言其实是大占实惠的。
3,关于CPU的知识。这块儿可以在学习内核过程中补,但这样的话你就须要看讲解很详尽的书,比方前面将会提及的《情景剖析》。你是否熟悉Intel80386CPU?尝试着回答这几个问题来判定一下:1)说出80386的中断门和圈套门的区别;2)说出保护模式与实模式的区别;3)多处理器机器上,普通的读-改-写回一块显存这样的动作,为何须要特殊的手段来保护。等等。讲解基于其它CPU的Linux内核的书,目前似乎只有一本《IA64Linux内核:设计与实现》──也还是Intel的,其它都是讲解基于IA32的。
以上算是知识方面吧,假如还要再补充一条,我想就是:动手编译过内核。
好了,我们接出来走。很多人装上Linux以后,第一件事找到内核源码所在的路径,打开一个C程序文件,开始哗哗哗翻页,瞧瞧大名鼎鼎的Linux内核代码究竟长啥模样──之后关掉。这是可理解的,但却不是学习的方式。刚开始,必须从读书入手。起码要对内核有一个Overview以后,才有可能带着问题去企图阅读源代码本身。[/color:8c0c3b6f46]下边就讲一下我读过的几本书:
1,《Linux内核设计与实现》,英语名LinuxKernelDevelopment(所以有人叫它LKD),机械工业出版社,¥35,法国RobertLove著,陈莉君译者。评说:
此书是现今首屈一指的入门最佳图书。作者是为2.6内核加入了占据的人,对调度部份十分精通,而调度是整个系统的核心,因而本书是很权威的。这本书讲解通俗易懂,全书没有列出一条汇编句子,而且给出了整个Linux操作系统2.6内核的概观,使你能通过阅读迅速获得一个overview。并且对内核中较为混乱的部份(如下半部),它的讲解是最透彻的。对没如何深入内核的人来说,这是强烈推荐的一本书。
翻译:翻译水平、负责任程度都不错,而且彩印存在一些错误。买了此书的同学可以参考我在Linux中级应用版的《Linux内核设计与实现英文版勘误》:
另外,此书2005年有了第二版,目前尚无中译本面世。我就是对照着2nd-en勘误1st-cn的。
2,《Linux内核源代码情境剖析》上、下。毛德操、胡希明著,四川学院出版社,下册¥80,上册¥70.评说:
本书是基于2.4.0内核的,比较早,也没据说会出第二版。下册讲解显存管理、中断、异常与系统调用、进程控制、文件系统与传统UnixIPC;上册讲解socket、设备驱动、SMP和引导。关于这套书的评价褒贬不一,我个人觉得其深度是同类专著中最优秀的。本书基于IntelIA32体系linux设备驱动程序 东南大学出版社,因为长度大,好多体系上的知识都捎带讲解了,所以假如你想深入了解内核的工作机制而又不十分熟悉IntelCPU的体系构造,本书是最合适的。缺点是:版本较老,没有TCP/IP合同栈部份(它讲的socket只是Unix域合同的),图表太少,不适宜初学者入门。还有就是对中学生同学来说,可能书价过高,这样的话可以考虑先买下册,由于下册是核心部份,上册一大部份都在讲具体PCI/ISA/USB设备的驱动。
翻译:没哪些翻译,作者是国人,并且行文流畅。本人书房上众多计算机精典图书当中,这套是惟一又精典又无阅读障碍的。
内核版很多同学早已把这书读到六七遍了,我很欣慰,下册差不多读熟了,上册就SMP部份还看过──但这就耗费了整整1年的时间qq for linux,还有很多弄不懂的。这儿顺便说明另外一个研究内核常见的误区:目标太庞大。要晓得Linux内核(最新的2.6.13)bzip2压缩以后37M,解压缩以后244M,根本不是那个人就能吃透的。虽然是内核的核心开发团队中,估计也只LinusTorvalds、AlanCox、DavidMiller、IngoMolnar寥寥数人会有比较全面的了解,其它人都是做自己专门的部份。我自己来说,目前早已决定舍弃显存管理的全部(slab层、LRU、rbtree等)、文件系统部份、外设驱动部份,暂时也没准备弄IA32以外的其它体系的部份。
3,《深入理解Linux内核》第二版。中国电力出版社。也是陈莉君译。此书是Linux内核黑客在推荐图书时的首选。评说:
此书C版的converse兄送了我一本第一版,因而就没买第二版,比较懊悔。因而只就第一版说一说,第一版基于2.2,第二版2.4。我见O'Reilly官方主页上说第三版的中文版将于2005年11月出版,也不知俺们何时才会看到。此书图表好多,形象地给出了关键数据结构的定义,与《情景剖析》相比,本书内容紧凑,不会一个问题讲解动辄上百页,有提纲挈领的功用,并且深度上要逊于《情景剖析》。
4,其它的几本书。市面上能看到的其它的Linux内核的图书,象《Linux设备驱动程序》、《Linux内核源代码完全注释》以及新出的《Linux内核剖析及编程》等。
《Linux设备驱动程序》第二版是基于2.4的,英文翻译不错,中国电力出版。这书指出动手实践,但它是讲解“设备驱动”的,不是最核心的东西,但是有些东西没硬件的话难以实践,可能更适宜驱动开发的程序员吧,不太适宜这些Forfunandprofit的人。此书有第三版中文版,西南学院出版社翻印,讲解2.6的,行文流畅,讲解的面也比第二版更广泛,我读过其中关于同步与互斥、内存分配的部份,觉得很不错。
《Linux内核源代码完全注释》(机械工业出版社)是复旦学院的博士生赵炯的专著,讲解0.1Linux内核,我没买也没看,有看过的同学说一说。
《Linux内核剖析及编程》(电子工业出版社)是刚才出版的,国人写的,讲解2.6.11。好多人说好,但有人说不够系统,我没买,不敢评说。
还有一本北大出的《Linux内核编程手册(第三版)》,原书应当是好书,并且翻译、排版非常糟烂,脱字跳行,根本无法看,我买了一本又丢掉了。
5,其它资源。TLDP(TheLinuxDocumentationProject)有大量文档wps for linux,其中不少是关于内核的,有些是在国外出版过的,象《LinuxKernelInterls》《TheLinuxKernel》《LinuxKernelModuleProgrammingGuide》等,作者都是亲身出席开发的人,专著较为可信。
中国Linux峰会的内核版。该版是研究内核的英文Linux社区中水平最高的,有好多专家级别的牛人,强烈推荐去学习一下(但建议不要问太过于简单的问题,人家性子再好也会烦的^_^),它的置顶贴简直是一个包罗万象的FAQ,精华区也有好多资料。只可惜太过曲高和寡,人气不是很旺。
6,一本不是讲解Linux的书:《现代体系结构上的Unix系统:内核程序员的SMP和Caching技术》,人民邮电出版社2003版,定价¥39.本书似乎不是讲解Linux,并且对所有Unix内核都是适用的,适宜对SMP和CPU的Cache那些组成原理知识不是很熟的同学,并且是好多美国牛人推荐的书。英文版翻译特别负责。
还有个很重要的问题:如何浏览内核源代码。有的同学喜欢在Windows上工作,用SourceInsight;有的在Linux,用SourceNavigator;还有专门浏览源代码的软件,象lxr(LinuxCrossReference);还有用ctags/ectags/cscope等,那些都是很优秀的软件。我个人用Vimctags浏览(参考了内核版wheelz高手的文档,)。
据悉,后面早已提及的一个重要的问题是:你研究内核的目的是哪些,开发?乐趣?若果是开发,并且是国外做开发,把kernelAPI熟悉一下就差不太多了(你也知道国内的水平有多差),比方说copy_from_user()、kmalloc()函数等,kernelAPI在Internet上找得到,编译内核时也可以用DocBook生成(具体请参考内核源代码包下的README文件);若果是研究,那就差异很大了,须要下很大的苦功:会用kmalloc()绝不说明你懂得Linux内核的虚存管理子系统,正仿佛会讲汉语不说明你懂中国文化一样。
说完了,发觉上面讲的太罗嗦了,简化一下:
1,动手编译内核
2,精读《Linux内核设计与实现》
3,上内核版看置顶贴与精华区
据悉就凭自己兴趣选择吧。
本文原创地址://q13zd.cn/xxnhxynxjclz.html编辑:刘遄,审核员:暂无