来自:http://blog.chinaunix.net/uid-26258259-id-3783679.html

内核文档

  内核代码中包含有大量的文档,这些文档对于学习理解内核有着不可估量的价值,记住,在任何时候,它们在我们心目中的地位都应该高于那些各式的内核参考书。下面是一些内核新人所应该阅读的文档。

  README

  这个文件首先简单介绍了Linux内核的背景,然后描述了如何配置和编译内核,最后还告诉我们出现问题时应该怎么办。

  Documentation/Changes这个文件给出了用来编译和使用内核所需要的最小软件包列表。

  Documentation/CodingStyle这个文件描述了内核首选的编码风格,所有代码都应该遵守里面定义的规范。

  Documentation/SubmittingPatches

  Documentation/SubmittingDrivers

  Documentation/SubmitChecklist

  这三个文件都是描述如何提交代码的,其中SubmittingPatches给出创建和提交补丁的过程,

  SubmittingDrivers描述了如何将 设备驱动提交给2.4、2.6等不同版本的内核树,SubmitChecklist则描述了提交代码之前需要check自己的代码应该遵守的某些事项。

  Documentation/stable_api_nonsense.txt这个文件解释了为什么内核没有一个稳定的内部API(到用户空间的接口——系统调用——是稳定的),它对于理解Linux的开发哲学至关重要,对于将开发平台从其他操作系统转移到Linux的开发者来说也很重要。

  Documentation/stable_kernel_rules.txt解释了稳定版内核(stable releases)发布的规则,以及如何将补丁提交给这些版本。

  Documentation/SecurityBugs

  内核开发者对安全性问题非常关注,如果你认为自己发现了这样的问题,可以根据这个文件中给出的联系方式提交bug,以便能够尽可能快的解决这个问题。

  Documentation/kernel-docs.txt这个文件列举了很多内核相关的文档和书籍,里面不乏经典之作。

  Documentation/applying-patches.txt这个文件回答了如何为内核打补丁。

  Documentation/bug-hunting这个文件是有关寻找、提交、修正bug的。

  Documentation/HOWTO这个文件将指导你如何成为一名内核开发者,并且学会如何同内核开发社区合作。它尽可能不包括任何关于内核编程的技术细节,但会给你指引一条获得这些知识的正确途径。

经典书籍

  待到山花烂漫时,还是那些经典在微笑。

  有关内核的书籍可以用汗牛充栋来形容,不过只有一些经典的神作经住了考验。首先是5本久经考验的神作(个人概括为“2+1+2”,第一个2是指2本全 面讲 解内核的书,中间的1指1本讲解驱动开发的书,后面的2则指2本有关内核具体子系统的书,你是否想到了某某广告里三个人突然站起单臂齐举高呼“1比1 比 1”的场景?)。

  《Linux内核设计与实现》

  简称LKD,从入门开始,介绍了诸如进程管理、系统调用、中断和中断处理程序、内核同步、时

  间管理、内存管理、地址空间、调试技术等方面,内容比较浅显易懂,个人认为是内核新人首先必

  读的书籍。新人得有此书,足矣!

  《深入理解Linux内核》

  简称ULK,相比于LKD的内容不够深入、覆盖面不广,ULK要深入全面得多。

  前面这两本,一本提纲挈领,一本全面深入。

  《Linux设备驱动程序》

  简称LDD,驱动开发者都要人手一本了。

  《深入理解Linux虚拟内存管理》

  简称LVMM,是一本介绍Linux虚拟内存管理机制的书。如果你希望深入的研究Linux的内存管理

  子系统,仔细的研读这本书无疑是最好的选择。

  《深入理解LINUX网络内幕》

  一本讲解网络子系统实现的书,通过这本书,我们可以了解到Linux内核是如何实现复杂的网络功能的。(忘了声明下,我这列出来的书名是中文的,但是并不代表我建议大家去看他们的中文版,其中有的翻译的实在太??了,呵呵)

  这5本书各有侧重,正如下面的图所展示的那样,恰好代表了个人一直主张的内核学习方法:首先通过LKD或ULK了解内核的设计实现特点,对内核有个整 体全局的认识和理解,然后可分为两个岔路,如果从事驱动开发,则钻研LDD,如果希望对内核不是泛泛而谈而是有更深入的理解,则可以选择一个自己感兴趣的 子系统,仔细分析它的代码,不懂的地方就通过社区、邮件列表或者直接发Email给maintainer请教等途径弄懂,切勿得过且过,这样分析下来,对 同步、中断等等内核的很多机制也同样会非常了解,俗话说的一通则百通就是这个道理。当然,如果你选择研究的是内存管理或者网络,则可以有上面的两本书可以 学习,如果是其他子系统可能就没有这么好的运气了。

  内核社区

  最近几年,社区网站非常的热火,不过此社区非彼社区。

  Linux最大的一个优势就是它有一个紧密团结了众多使用者和开发者的社区,它的目标就是提供尽善尽美的内核。内核社区的中心是内核邮件列表(Linux Kernel Mailing List,LKML),我们可以在http://vger.kernel.org/vger-lists.html#linux-kernel上面看到订阅这个邮件列表的细节。

  内核邮件列表的流量很大,每天都有几百条消息,这里是大牛们的战场,小牛们的天堂,任何一个内核开发者都可以从中受益非浅。除了LKML,大多数子系统也有自己独立的邮件列表来协调各自的开发工作,比如USB子系统的邮件列表可以在http://www.linux-usb.org/mailing.html 上面订阅。

  其他网络资源

  除了内核邮件列表,还有很多其他的论坛或网站值得我们经常关注。我们要知道,网络上不仅有兽兽和凤姐,也不仅有犀利哥和韩局长。http://www.kernel.org/ 可以通过这个网站上下载内核的源代码和补丁、跟踪内核bug等。http://kerneltrap.org Linux和BSD内核的技术新闻。如果没时间跟踪LKML,那么经常浏览kerneltrap是个好主意。http://lwn.net/ Linux weekly news,创建于1997年底的一个Linux新闻站点。http://zh-kernel.org/mailman/listinfo/linux-kernel 这是内核开发的中文邮件列表,里面活跃着很多内核开发领域的华人,比如Herbert  Xu,、Mingming Cao、Bryan Wu等。

Linux内核学习之道的更多相关文章

  1. Linux 内核学习的经典书籍及途径

    from:http://www.zhihu.com/question/19606660 知乎 Linux 内核学习的经典书籍及途径?修改 修改 写补充说明 举报   添加评论 分享 • 邀请回答   ...

  2. 关于Linux内核学习的误区以及相关书籍介绍

    http://www.hzlitai.com.cn/article/ARM9-article/system/1605.html 写给Linux内核新手-关于Linux内核学习的误区 先说句正经的:其实 ...

  3. linux内核学习之二:编译内核

    在linux内核学习系列的第一课中讲述了搭建学习环境的过程(http://www.cnblogs.com/xiongyuanxiong/p/3523306.html),环境搭好后,马上就进入到下一环节 ...

  4. linux内核学习之一:环境搭建--安装Debian7.3

    本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基础知识及基本shell命令:现代操作系统的基本概念:C语言和gc ...

  5. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  7. Linux内核学习趣谈

    本文原创是freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/9304991 从大二开始学习Linux内核,到现在已经 ...

  8. Linux 内核学习经验总结

    Linux 内核学习经验总结 学习内核,每个人都有自己的学习方法,仁者见仁智者见智.以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下. 内核学习,一偏之见:疏漏难 ...

  9. Linux内核分析——Linux内核学习总结

    马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...

随机推荐

  1. php调用c/c++的一种方式

    php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系 ...

  2. 一些笔试题(C/C++)

    1.there are two variables, don't use if.. else or ?: or switch or other judgement statements,find ou ...

  3. MongoDB 副本集管理(不定时更新)

    简介: 前面介绍完了副本集的搭建.用户的管理.参数和日常操作的说明,那副本集搭建好该如何管理呢?现在来说明下副本集的日常查看和管理. 说明: 1)查看命令行参数:db.serverCmdLineOpt ...

  4. effective OC2.0 52阅读笔记(三 接口与API设计)

    第三章:接口与API设计 15 用前缀避免命名空间冲突 总结:避免重名符号错误的唯一办法是变相实现命名空间.为所有符号都加上命名前缀.类和分类都应加三字前缀.注意类实现文件中的纯C函数及全局变量,是算 ...

  5. Django~Views

    In Django, web pages and other content are delivered by views. To get from a URL to a view, Django u ...

  6. CODE VS1008选数

    #include<cstdlib> #include<cstdio> #include<iostream> #include<cmath> #inclu ...

  7. 20145213《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145213<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验要求 使用JDK编译.运行简单的Java程序. 使用IDEA编辑.编译.运行.调试J ...

  8. DOM动画效果基础入门

    一.什么是DOM? Document Object Model文档对象模型 当创建一个网页并把它加载到web浏览器中时,如果没有document(文档): DOM根据你编写的网页文档创建一个文档对象 ...

  9. Android笔记:四大组件

    1.Activity(是用户可以看到的主要的界面,使用时需要在AndroidManifest.xml中编辑声明.) 启动模式: 启动模式一共有四种,分别是standard.singleTop.sing ...

  10. Swift - 键盘弹出样式

    Swift提供了11种键盘类型: 在开发中,我们可以根据不同的需求,选择不同的键盘样式,例如,当我们只需要输入手机号码时,可以选择纯数字类型的键盘(.NumbersAndPunctuation),当我 ...