linux 内核 文件结构

目录概述 

/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.cVersion.c,是研究核心如何工作的好的起点之一。
  • Mm/:包括所有独立于CPU体系结构的内存管理代码,如页式存储管理内存的分配和释放等;而和体系结构相关的内存管理代码则位于arch/*/mm/,例如arch/i386/mm/Fault.c
  • Kernel/:主要的核心代码,此目录下的文件实现了大多数Linux系统的内核函数,其中最重要的文件当属sched.c。同样,和体系结构相关的代码在arch/*/kernel中。
  • Drivers/:放置系统所有的设备驱动程序,每种驱动程序又各占用一个子目录,如/block下为块设备驱动程序,比如ide(ide.c)
  • Documentation/:文档目录,没有内核代码,只是一套有用的文档。
  • Fs/:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如fatext2
  • Ipc/:包含核心的进程间通讯的代码。
  • Lib/:放置核心的库代码。
  • Net/:核心与网络相关的代码。
  • Modules/:模块文件目录,通常是一个空目录,用于存放编译时产生的模块目标文件。

4. 虚拟文件系统(VFS)

  • 作用:VFS是Linux内核中非常有用的一个组件,它为文件系统提供了一个通用的接口抽象。VFS在用户和文件系统之间提供了一个交换层,使得用户应用程序不需要关注文件所在的文件系统类型。
  • 结构:在VFS上面,是对诸如openclosereadwrite之类的函数的一个通用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子目录下,可能会有bootkernelmm等子目录,分别包含控制系统引导、内核核心功能、内存管理等相关的代码。

三、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

说明

  1. 根目录:Arch目录是Linux内核源码中与体系结构相关的代码存放地。

  2. 子目录:每个子目录代表一种支持的CPU体系架构,如alphaarmx86等。

  3. 架构特定目录:在每种架构的子目录下,通常会有bootkernelmminclude等子目录,分别用于存放该架构的引导代码、内核核心代码、内存管理代码和头文件等。

  4. 特殊文件.gitignoreKconfig是Linux内核源码中常见的文件,.gitignore用于指定Git应忽略哪些文件和目录,而Kconfig则用于内核配置系统的管理。

请注意,这只是一个典型的Arch目录树状图描述,实际的内核源码中可能会有所不同,具体取决于内核的版本和配置选项。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值