linux内核源码在哪

linux内核源码在哪,第1张

一般在Linux系统中的/usr/src/linux*.*.*(*.*.*代表的是内核版本,如2.4.23)目录下就是内核源代码(如果没有类似目录,是因为还没安装内核代码)。另外还可从互连网上免费下载。注意,不要总到http://www.kernel.org/去下载,最好使用它的镜像站点下载。请在http://www.kernel.org/mirrors/里找一个合适的下载点,再到pub/linux/kernel/v2.6/目录下去下载2.4.23内核。 代码目录结构 在阅读源码之前,还应知道Linux内核源码的整体分布情况。现代的 *** 作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应,其组成如下(假设相对于Linux-2.4.23目录): 1.arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。 2.include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。 3.init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。 4.mm目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。 5.drivers目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。 6.ipc目录包含了核心进程间的通信代码。 7.modules目录存放了已建好的、可动态加载的模块。 8.fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。 Kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。 9.net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。 10.lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。 11.scripts目录包含用于配置核心的脚本文件。 12.documentation目录下是一些文档,是对每个目录作用的具体说明。 一般在每个目录下都有一个.depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。 在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。对于Linux启动的代码可顺着Linux的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解。

Linux的内核源代码可以从很多途径得到。一般来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。

对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲,我认为,基本要求是:1、 *** 作系统的基本知识2、对C语言比较熟悉,最好要有汇编语言的知识和GNU C对标准C的扩展的知识的了解。

另外在阅读之前,还应该知道Linux内核源代码的整体分布情况。我们知道现代的 *** 作系统一般由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,各个目录大致对应了这些方面。Linux内核源代码的组成如下(假设相对于linux目录):

arch 这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。

include 这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。

init 此目录包含核心启动代码。

mm 此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/-/mm目录下,如对应于X86的就是arch/i386/mm/fault.c 。

drivers 系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。

ipc 此目录包含了核心的进程间通讯代码。

modules 此目录包含已建好可动态加载的模块。

fs Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。

kernel 主要核心代码。同时与处理器结构相关代码都放在arch/-/kernel目录下。

net 核心的网络部分代码。里面的每个子目录对应于网络的一个方面。

lib 此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/-/lib/目录下。

scripts 此目录包含用于配置核心的脚本文件。

Documentation 此目录是一些文档,起参考作用。

这段时间一直在为毕业论文纠结,论文题目是关于Linux进程模块的源代码分析与研究。 以前拜读过《 *** 作系统设计与实现》,《Linux内核设计与实现》,《understanding the linux kernel 3rd》等等,桌面还有大把的网络下下来的资料。 初识这本书,是大三时候一位同学跟我提起,当时觉得还没到阅读源代码的程度。一直到做这篇论文,在我最纠结的时候,忽然想起朋友说过这本书,于是下了电子版本。 理所当然,我完全被这本书吸引。 我难掩心中的激动,几乎要欢呼起来,这何尝不是一本可以当做小说阅读的书籍! 这本书不像前两本那样,仅仅只是罗列出Linux的特性,数据结构,相关的技术等等,他是在带领你去走进Linux源代码的世界,顺着代码的调用,一路斩荆披棘,最后带你到底目的地。途中虽然惊险,但一路过来,却是充满了趣味,更是享受到了智力上的成就感。 关于书的语言。 读这本书,仿佛是你的好朋友就坐在你面前跟你讲话,他把Linux源码中的枯燥的理论跟生活中普遍的事物联系起来,像进程的task_struct结构体,相当于我们的“户口本”,进程转换到"zombie”状态,“进程死亡了无法帮自己注销户口登记,要父进程帮忙”等等,这些解释非常地形象。所谓的大师也便是如此,用最通俗的语言把最深奥的道理讲明白,我想,这本书的作者做到了。 此书的不足。 这本书也存在着不足之处。第一点,此书是2001年出版的,所以是以2.4版本的源代码为基础的,而现在已经长期停留在2.6版本了;第二是,书中的图片严重不足,很多原理只要附加张图片便能让读者明了,可是作者花了不少的篇幅去解释而没有附加图片,这很让人费解,或者这是因为录入不是作者本人做的原因;第三,这跟很多国内书籍类似,没有索引,查找代码的讲解是件很痛苦的事情。 距离这本书第一次出版已经有八年的时间了,希望作者能抽出时间再修订,在此基础上做2.6版本源代码的分析。 这是我见过的国内比较好的真正用心去写的计算机书籍,在此之前也只读过一本关于汇编语言的书籍,作者是王爽。依稀还记得当年舍友都睡了的时候,一个人小心翼翼地趴在笔记本前仔细阅读的情景,如今甚是怀念。 这是本好书。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7569193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存