1、documentation:linux
没有内核代码,提供文档帮助。程序员
2、arch:算法
arch是architecture的缩写。全部与体系结构相关的代码都在这个目录以编程
include/asm-*/目录中。Linux支持的每种体系结构在arch目录下都有对应的目录,又进一安全
步分解为boot,mm,kernel等子目录:网络
| kernel: 存放支持体系结构特有的诸如信号量处理和SMP之类特征的实现。编程语言
| lib: 存放体系结构特有的对诸如strlen和memcpy之类的通用函数的实现。ide
| mm: 存放体系结构特有的内存管理程序的实现。函数
除了这3个子目录之外,大多数体系结构在必要的状况下还有一个boot子目录,包括了在这种硬件平台上启动内核所使用的内存管理程序的实现。工具
3、drivers:
驱动代码,驱动是一个控制硬件的软件。这个目录是内核中最庞大的一个目录,显卡、网卡、SCSI适配器、PCI总线、USB总线和其余任何Linux支持的外围设备或总线的驱动程序均可以在这儿找到。
4、fs:
虚拟文件系统(VFS)的代码,和各个不一样文件系统的代码都在这个目录中。Linux支持的全部文件系统在fs目录下面都有一个对应的子目录。好比ext2文件系统对应的是fs/ext2目录。
一个文件系统是存储设备和须要访问存储设备的进程之间的媒介。存储设备多是本地的物理上能够访问的,好比硬盘或者CD-ROM驱动器,他们分别使用而系统ext2/ext3和isofs文件系统。
还有一些虚拟文件系统(proc),它是一个标准文件系统出现。然而,他其中的文件只存在于内存中,并不占磁盘空间。
5、include:
这个目录包含了内核中大部分的头文件,它按照下面的子目录进行分组。要修改处理器结构则只需编辑核心的makefile并从新运行Linux核心配置程序。
| include/asm-*/ 每个对应着一个arch的子目录,好比include/asm-alpha、
Include/asm-arm等。每一个子目录中的文件都定义了支持给定体系结构所必要的预处理函数和内联函数,这些内联函数多数都是所有或者部分的汇编语言实现。
| include/linux 与平台无关的头文件都在这个目录下,它一般会被连接到目录 /usr/include/linux(或者它里面的全部文件都会被复制到
/usrinclude/linux目录下边)
6、init:
内核的初始化代码。包括main.c、建立早起用户空间的代码及其余初始化代码。
7、ipc:
IPC(进程间通讯)。它包含了共享内存、信号量及其余形式的IPC代码。
8、kernel:
内核中最核心的部分,包括进程的调度(sched.c),以及进程的建立和撤销(fork.c和exit.c)和平台相关的另一部分核心代码在arch/*/kernel目录下。
9、mm
此目录包含了与体系无关的部份内存管理代码。与体系结构相关的内存管理代码位于arch/*/mm下。
10、net
核心的网络部分代码,实现了各类常见的网络协议,入TCP/IP、IPX等。
11、lib
此目录包含了核心的库代码。实现了一个标准C库的通用子集,包括字符串和内存操做的函数(strlen、mmcpy等)以及有关sprintf和atoi系列函数。与arch/lib下的代码不一样,这里的库代码都是C编写的,在内核新的移植版本中能够直接使用。与处理器结构相关库代码被放在arch/mm中。
12、block:
块设备驱动包括IDE(在ide.c中)驱动。块设备是以数据块方式接收和发送的数据的设备。最初block层代码一部分位于drivers目录,一部分位于fs目录。从2.6.15开始,block层的核心代码就被提取出来放在顶层的block目录中。若是你想寻找这些可包含文件系统的设备的初始化过程则应该在drivers/block/genhd.c中的device_setup()。当安装一个nfs文件系统时不但要初始化硬盘还需初始化网络。块设备包括IDE与SCSI设备。
13、firmware
fireware中包含了让计算机读取和理解从设备发来的信号的代码。举例来讲,一个摄像头管理它本身的硬件,但计算机必须了解摄像头给计算机发送的信号。Linux系统会使用vicam固件(firmware)来理解摄像头的通信。不然,没有了固件,Linux系统将不知道如何处理摄像头发来的信息。另外,固件一样有助于将Linux系统发送消息给该设备。这样Linux系统能够告诉摄像头从新调整或关闭摄像头。
13、usr:
实现用于打包和压缩的cpio等。这个文件夹中的代码在内核编译完成后建立这些文件。
14、securtity:
这个目录下包含了不一样的Linux安全模型的代码。它对计算机免于受到病毒和黑客的侵害很重要。不然,Linux系统可能会遭到损坏。
15、crypto:
内核自己所用的加密API,实现了经常使用的加密和散列算法,还有一些压缩和CRC校验算法。例:“sha1_generic.c”这个文件包含了SHA1加密算法的代码。
16、scripts:
该目录下没有内核代码,只是包含了用来配置内核的脚本文件。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。
17、sound:
声卡驱动以及其余声音相关的源码。
18、samples
一些内核编程的范例
19、virt
此文件夹包含了虚拟化代码,它容许用户一次运行多个操做系统。经过虚拟化,客户机操做系统就像任何其余运行在Linux主机的应用程序同样运行。
20、tools
这个文件夹中包含了和内核交互的工具。
COPYING:许可和受权信息。Linux内核在GPLv2许可证下受权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。然而,没有人能够出售源代码。
CREDITS : 贡献者列表
Kbuild : 这是一个设置一些内核设定的脚本。打个比方,这个脚本设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。
Kconfig: 这个脚本会在开发人员配置内核的时候用到
MAINTAINERS : 这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。当一个开发者在内核中发现一个问题,并但愿可以报告给可以处理这个问题的维护者时,这是是颇有用的。
Makefile :这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。
README : 这个文档提供给开发者想要知道的如何编译内核的信息。
REPORTING-BUGS : 这个文档提供如何报告问题的信息。
内核的代码是以“.c”或“.h”为扩展名的文件。 “.c”的扩展名代表内核是用众多的编程语言之一的C语言写的, “h”的文件是头文件,而他们也是用C写成。头文件包含了许多“.c”文件须要使用的代码,由于他们能够引入已有的代码而不是从新编写代码,这节省了程序员的时间。不然,一组执行相同的动做的代码,将存在许多或所有都是“c”文件。这也会消耗和浪费硬盘空间。(译注:头文件不只仅可节省重复编码,并且代码复用也会下降代码错误的概率)