linux 内核源代码 目录结构 介绍

来源:互联网 发布:java文章管理系统 编辑:程序博客网 时间:2024/05/17 02:02

注意:各个版本结构稍有不同,不要死板硬套。


arch

arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。它下面的每个子目录代表一种linux支持的体系结构。


和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。


如arm目录就是与ARM体系结构兼容的CPU的子目录;/arch/i386则是intel CPU及其兼容体系结构的子目录.



block:部分块设备驱动程序



crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。



Documentation:关于内核各部分的通用解释和注释。

Documentation:内核文档目录,是理解linux源代码的直接辅助来源。



drivers:设备驱动程序,每个不同的驱动占用一个子目录。
drivers: 包含了系统中所有的设备驱动程序,linux中的设备被划分为几类,每一类都有对应的目录。


fs:各种支持的文件系统,如ext、fat、ntfs等。

fs:存放了linux支持的文件系统的代码。不同的文件系统有不同的子目录对应。



include:头文件。其中,和系统相关的头文件被放置在linux子目录下。



init:内核初始化代码(注意不是系统引导代码,系统引导代码在arch中)。



ipc:进程间通信的代码。



kernel:内核的最核心部分,包括进程调度、定时器等,和平台相关的一部分代码放在archmm目录下。
kernel: 进程管理的核心代码。与处理器相关的代码放在了arch/*/kernel中。



lib:核心的库代码目录。与处理器体系结构相关的文件放在了arch/*/lib中




mm:内存管理代码目录。与硬件体系结构相关的文件放在了arch/*/mm中。




net:网络相关代码,实现了各种常见的网络协议。

net:内核的网络部分代码,每一个子目录对应一种网络协议。



scripts:用于配置内核文件的脚本文件。

scripts:包含了内核的配置脚本文件。



security:主要是一个SELinux的模块。



sound:常用音频设备的驱动程序等。



usr:实现了一个cpio。



根目录和大部分子目录下都有Makefile和Kconfig两个文件,内核的配置和编译就依赖于这两个文件。


 Linux kernel Makefile 的规则:

Linux内核Makefile体系可以分为五部分:

Makefile: 位于内核源代码根目录的Makefile. 称为TOP Makefile

 .config: 内核配置文件。

arch/arch_name/Makefile: 各个体系结构独立代码中的Makefile 成为Arch Makefile

kbuild Makefile: 整个源代码目录中约有500个这样的Makefile

scripts/Makfile.*:适用于各种Kbuild Makefile的一般规则。

Top Makefile读取由内核配置程序生成的.config文件,它负责生成两个重要的产品:驻留内核(vmlinux)和内核模块(module)。 

Top Makfile递归的进入各级子目录来编译所需的源代码,进入哪些目录则由内核配置过程决定。

TOP Makefile中必须显示地包含一个Arch Makefile而且只能够包含一个,以提供所有与体系结构相关的信息。


每一个子目录中都有一个kbuild Makefile,它负责执行具体的编译任务。

kbuild Makefile从.config文件中提取构造所需编译的文件列表的信息,这些信息告诉kbuild Makefile目录中哪些文件需要编译,进一步哪些文件需要编译进内核中,哪些需要编译成动态链接的内核模块。


scripts目录中的Makefile包含了一些通用的定义和规则,这些定义和规则传递到具体构造内核的kbuild Makefile中。





在i386体系下,系统引导将从arch/i386/kernel/head.s开始执行,并进而转移到init/main.c中的main()函数初始化内核。可按流程顺序进行阅读(主要数据结构定义要弄清),对于各模块代码粗略看看就可以了,重点应该放在你所要研究的那个方向。要知道,一个人掌握全部Linux内核源代码是很困难的!

原创粉丝点击