目录概述
|
/arch |
不同CPU架构下的核心代码。其中的每一个子目录都代表Linux支持的CPU架构 |
|
/block |
块设备通用函数 |
|
/crypto |
常见的加密算法的C语言实现代码,譬如crc32、md5、sha1等 |
|
/Documentation |
说明文档,对每个目录的具体作用进行说明 |
|
/drivers |
内核中所有设备的驱动程序,其中的每一个子目录对应一种设备驱动 |
|
/firmware |
固件代码 |
|
/fs |
Linux支持的文件系统代码,及各种类型的文件的操作代码。每个子目录都代表Linux支持的一种文件系统类型 |
|
/include |
内核编译通用的头文件 |
|
/init |
内核初始化的核心代码 |
|
/ipc |
内核中进程间的通信代码 |
|
/kernel |
内核的核心代码,此目录下实现了大多数Linux系统的内核函数。与处理器架构相关的内核代码在/kernel/$ARCH/kernel |
|
/lib |
内核共用的函数库,与处理器架构相关的库在/kernel/$ARCH/lib |
|
/mm |
内存管理代码,譬如页式存储管理内存的分配和释放等。与具体处理器架构相关的内存管理代码位于/arch/$ARCH/mm目录下 |
|
/net |
网络通信相关代码 |
|
/samples |
示例代码 |
|
/scripts |
用于内核配置的脚本文件,用于实现内核配置的图形界面 |
|
/security |
安全性相关的代码 |
|
/tools |
Linux中的常用工具 |
|
/usr |
内核启动相关的代码 |
|
/virt |
内核虚拟机相关的代码 |
1.linux 内核 文件结构
Linux内核的文件结构是其核心组成部分,它负责管理系统资源、驱动硬件设备和提供各种系统服务。Linux内核文件结构通常包括多个关键目录和文件,下面将详细介绍Linux内核的文件结构:
1. 核心源程序目录
- 位置:Linux核心源程序通常都安装在
/usr/src/linux下。 - 编号约定:Linux核心源程序有一个简单的编号约定,任何偶数的核心(即版本号中第二个数字为偶数,例如2.0.30)都是一个稳定地发行的核心,而任何奇数的核心(例如2.1.42)都是一个开发中的核心。
2. 关键目录和文件
- COPYING:GPL版权申明。对具有GPL版权的源代码改动而形成的程序,或使用GPL工具产生的程序,具有使用GPL发表的义务,如公开源代码。
- CREDITS:光荣榜,对Linux做出过很大贡献的一些人的信息。
- MAINTAINERS:维护人员列表,显示当前版本的内核各部分都有谁负责。
- Makefile:用来组织内核的各模块,记录了个模块间的相互联系和依托关系,编译时使用。
- ReadMe:核心及其编译配置方法简单介绍。
- Rules.make:各种Makefile所使用的一些共同规则。
- REPORTING-BUGS:有关报告Bug的内容。
3. 子目录结构
- Arch/:包含了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如
i386就是关于Intel CPU及与之相兼容体系结构的子目录。 - Include/:包括编译核心所需要的大部分头文件。与平台无关的头文件在
include/linux子目录下,与Intel CPU相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关SCSI设备的头文件目录。 - Init/:包含核心的初始化代码(不是系统的引导代码),包含两个文件
main.c和Version.c,是研究核心如何工作的好的起点之一。 - Mm/:包括所有独立于CPU体系结构的内存管理代码,如页式存储管理内存的分配和释放等;而和体系结构相关的内存管理代码则位于
arch/*/mm/,例如arch/i386/mm/Fault.c。 - Kernel/:主要的核心代码,此目录下的文件实现了大多数Linux系统的内核函数,其中最重要的文件当属
sched.c。同样,和体系结构相关的代码在arch/*/kernel中。 - Drivers/:放置系统所有的设备驱动程序,每种驱动程序又各占用一个子目录,如
/block下为块设备驱动程序,比如ide(ide.c)。 - Documentation/:文档目录,没有内核代码,只是一套有用的文档。
- Fs/:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如
fat和ext2。 - Ipc/:包含核心的进程间通讯的代码。
- Lib/:放置核心的库代码。
- Net/:核心与网络相关的代码。
- Modules/:模块文件目录,通常是一个空目录,用于存放编译时产生的模块目标文件。
4. 虚拟文件系统(VFS)
- 作用:VFS是Linux内核中非常有用的一个组件,它为文件系统提供了一个通用的接口抽象。VFS在用户和文件系统之间提供了一个交换层,使得用户应用程序不需要关注文件所在的文件系统类型。
- 结构:在VFS上面,是对诸如
open、close、read和write之类的函数的一个通用API抽象。在VFS下面是文件系统抽象,它定义了上层函数的实现方式。
5. 其他重要组件
- 内存管理:Linux内核负责管理系统的物理内存和虚拟内存,包括内存分配、释放和页面置换等。
- 进程管理:内核负责进程的创建、调度、同步和通信等,确保系统能够高效地运行多个进程。
- 设备驱动程序:为各种硬件设备提供接口,使得操作系统能够与硬件设备进行通信和交互。
- 网络接口:支持各种网络协议和硬件设备,实现网络通信功能。
综上所述,Linux内核的文件结构是一个复杂而有序的系统,它通过各种目录和文件来组织和管理内核的各个组成部分。这些组件共同协作,使得Linux系统能够高效地运行各种应用程序和管理系统资源。
Arch目录详解
Arch目录是Linux内核中非常重要的一个目录,它负责存储与体系结构相关的核心代码。以下是对Arch目录的详细解析:
一、Arch目录的作用
Arch目录是Linux内核中针对不同CPU体系架构平台的代码集合。由于不同的硬件平台(如x86、ARM、MIPS等)在底层实现上有很大的差异,因此需要专门的代码来支持这些平台。Arch目录就起到了这样的作用,它将与平台相关的代码组织在一起,使得内核能够适应不同的硬件环境。
二、Arch目录的结构
Arch目录下的结构通常是多层级的,每种CPU体系架构都对应一个子目录。以x86架构为例,Arch目录下会有一个名为x86的子目录,其中包含了针对x86架构的所有相关代码。类似地,对于ARM架构,则会有一个名为arm的子目录。
在每种架构的子目录下,通常还会进一步分解为更小的子目录,以组织不同功能的代码。例如,在x86子目录下,可能会有boot、kernel、mm等子目录,分别包含控制系统引导、内核核心功能、内存管理等相关的代码。
三、Arch目录中的重要文件和目录
- boot子目录:通常包含系统的引导代码,这些代码负责在系统启动时加载和初始化内核。
- kernel子目录:包含特定于该架构的内核核心代码,如进程管理、系统调用等。
- mm子目录:包含特定于该架构的内存管理代码,如页面分配、回收等。
- include/asm子目录:包含与汇编语言相关的头文件,这些头文件定义了该架构特有的数据类型、宏和函数原型等。
四、Arch目录与内核其他部分的关系
Arch目录中的代码与内核的其他部分密切相关。例如,内存管理、进程调度等核心功能在内核中都有通用的实现,但这些通用实现需要与特定于架构的代码相结合才能正常工作。因此,Arch目录中的代码通常会调用内核中通用的函数和数据结构,同时也会提供特定于架构的实现来支持这些通用功能。
五、Arch目录的维护和发展
由于Linux内核支持多种硬件平台,并且这些平台的技术不断发展变化,因此Arch目录中的代码也需要不断更新和维护。Linux内核社区中有专门的维护人员负责跟踪各种架构的最新发展,并对Arch目录中的代码进行更新和优化。
总的来说,Arch目录是Linux内核中非常重要的一个组成部分,它负责存储与体系结构相关的核心代码,使得内核能够适应不同的硬件环境。对于想要深入了解Linux内核的人来说,Arch目录是一个不可或缺的研究对象。
Arch目录的树状图
由于我无法直接绘制树状图,我将以文本形式描述Arch目录的典型树状结构,您可以根据这个描述自行绘制树状图或使用绘图工具来生成。
Arch目录树状图描述
Arch/
├── alpha/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── arc/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── arm/
│ ├── boot/
│ │ ├── compressed/
│ │ ├── dtbs/
│ │ ├── Image
│ │ ├── Makefile
│ │ ├── piggy.S
│ │ ├── tools/
│ │ └── ...
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ ├── lib/
│ ├── tools/
│ └── ...
├── arm64/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ ├── lib/
│ ├── tools/
│ └── ...
├── cshy/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── hexagon/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── ia64/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── loongarch/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── m68k/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── microblaze/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── openrisc/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── parisc/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── powerpc/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── riscv/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── s390/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── sh/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── sparc/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── um/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── x86/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── xtensa/
│ ├── boot/
│ ├── kernel/
│ ├── mm/
│ ├── include/
│ └── ...
├── .gitignore
└── Kconfig
说明
-
根目录:Arch目录是Linux内核源码中与体系结构相关的代码存放地。
-
子目录:每个子目录代表一种支持的CPU体系架构,如
alpha、arm、x86等。 -
架构特定目录:在每种架构的子目录下,通常会有
boot、kernel、mm、include等子目录,分别用于存放该架构的引导代码、内核核心代码、内存管理代码和头文件等。 -
特殊文件:
.gitignore和Kconfig是Linux内核源码中常见的文件,.gitignore用于指定Git应忽略哪些文件和目录,而Kconfig则用于内核配置系统的管理。
请注意,这只是一个典型的Arch目录树状图描述,实际的内核源码中可能会有所不同,具体取决于内核的版本和配置选项。
156

被折叠的 条评论
为什么被折叠?



