16.1.1 代码目录分布

来源:互联网 发布:搜索引擎快速排名优化 编辑:程序博客网 时间:2024/05/13 21:22

16.1.1  代码目录分布

Linux的内核源代码可以从http://www.kernel.org/pub/Linux/kernel/网站上下载,本书使用Linux-2.6.26.3版本(可能不是最新版本,读者可以去下载最新的版本),其代码目录结构参见图16.1

q      Documentation:这个目录下面没有内核的代码,有一套有用的内核文档。其中的文档质量良莠不齐,有很多内核文档的质量很优秀并且相当完整,例如文件系统;但是有的则完全没有文档,例如进程调度。在这个目录里不时可以发现有用的    东西。

 

 

16.1  Linux内核的源代码结构

q      arch:此目录下的所有子目录的东西都是体系结构特有的代码。每个体系结构特有的目录下面至少包含3个子目录:kernel,不同体系结构内核特有的实现方式,如信号量、计时器、SMP等;lib,不同体系结构下的高性能通用代码实现,如memcpy等;mm,不同体系结构特有的内存管理程序的实现。

q      drivers:内核的驱动程序代码。此部分的代码占内核代码的大部分,包括显卡、网卡、PCI等外围设备的驱动代码。

q      fs:文件系统代码。包含ext2ext3等本地文件系统,CD-ROMisofs等镜像系统,还有NFS等网络文件系统,以及proc等伪文件系统。

q      include:此目录中包含了Linux内核中的大部分头(*.h)文件。

q      init:内核初始化过程的代码。

q      ipc:进程间通信代码。

q      kernel:这部分是Linux内核中最重要的,包含了内核中平台无关的基本功能,主要包含进程创建、销毁和调度的代码。

q      lib:此目录中主要包含内核中其他模块使用的通用函数和内核自解压的函数。

q      mm:此目录中的代码实现了平台无关的内存管理代码。

q      scripts:此目录下是内核配置时使用的脚本,当使用make menuconfig或者make xconfig命令时,会调用此部分代码。

q      net:此目录中包含Linux内核的网络协议栈的代码。在子目录netfilter下为netfilter的实现代码,netfilter构建了一个框架,允许在不重新编译内核的情况下,编写可加载内核,在指定的地方插入回调函数,以用户自己的方式处理网络数据。子目录ipv4ipv6TCP/IP协议栈的IPv4IPv6的实现,主要包含了TCPUDPIP协议的代码,还有ARP协议、ICMP协议、IGMP协议、netfilterTCP/IP实现等代码实现,以及如procioctl等控制相关的代码。本书的重点集中在这个目录中的相关技术。

16.2所示是源代码组织的另一种表现形式,它映射到Linux代码的3个内核层。

 

 

16.2  映射到Linux代码的3个内核层的源代码组织

如图16.2所示,以太网相关的为本书涉及的部分,其他(例如SLIPIRDA等)部分是为了比较而用。