一直想重新编译linux内核。特一步步分析理解编译内核全过程
内核中主要文件的作用如下:
1. arch:arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux 支持的体系结构,例如i386 就是Intel CPU 及与之兼容体系结构的子目录。该目录的存放具体地依赖于体系结构实现的代码。在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel、lib和mm。kernel子目录包含依赖于体系结构实现的一般内核功能,例如信号处理、时钟处理等。lib子目录包含库函数的本地实现。如果从依赖于体系结构的源码编译,则运行得更快。mm子目录包含存储管理实现的代码。
2. include:include目录包括编译核心所需要的大部分头文件。例如与平台无关的头文件在include/linux子目录下。
3. init:init目录包含核心的初始化代码(不是系统的引导代码),包含有main.c 和Version.c以及其它文件。 该目录存放所有系统的初始化代码,包含许多重要的文件,例如main.c。
4. mm:mm目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。
5. drivers:drivers目录中是系统中所有的设备驱动程序。每一种有对应一个的子目录。这个目录拥有50%以上的内核源码。
6. ipc:ipc目录包含了核心进程间的通信代码。
7. modules:modules目录存放了已建好的、可动态加载的模块。
8. fs:fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。该目录存放着所有系统支持的文件系统的实现代码。
9. Kernel:内核管理的核心代码放在这里。同时与处理器结构相关的内核管理的核心代码都放在arch/*/kernel 目录下。许多最常调用的内核函数放在该目录下。调度器fork()和timer.c就放在这里。你还能在这个目录下找到printk.c。
10. net:net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。
11. lib:lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。 该目录放置内核其他部分经常所需要的代码。例如,inflate.c就放在这里,它能够在引导时解压内核并装入内存,它也知道如何解压标准PKZIP 8位压缩算法。
12. scripts:scripts目录包含用于配置核心的脚本文件。
13. documentation:documentation目录下是一些文档,是对每个目录作用的具体说明。一般在每个目录下都有一个depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件,对弄清各个文件之间的联系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解.该目录存放了大量的内核代码相关文档,以及用户开发和维护手册。