B站相应的视屏教程:
Day 5:深入理解 Linux 内核结构
Linux 内核作为一个复杂的操作系统内核,其源代码规模庞大、模块众多,初学者容易迷失在文件与概念之中。为了更高效、系统地理解 Linux 内核的整体架构,我们将采用一个 四层模型,从宏观到微观地解析内核结构,帮助你建立清晰的认知框架。
掌握内核结构,是从“会用”到“精通”的关键一步。
层级 | 逻辑名称 | 功能描述 | 对应源码路径 | 示例 |
---|---|---|---|---|
1 | 核心层(Kernel Core) | 提供基本能力:调度、内存管理、系统调用、锁等 | kernel/ 、mm/ 、ipc/ 、lib/ |
kernel/sched/ (调度)、mm/memory.c (内存) |
2 | 子系统层(Subsystem) | 网络、文件系统、图形、音频等大功能模块 | net/ 、fs/ 、sound/ 、drivers/gpu/ |
net/core/ 、fs/ext4/ |
3 | 驱动层(Device Drivers) | 与具体硬件设备交互,完成设备初始化、控制 | drivers/ 各模块目录 |
drivers/gpu/imx/lcdif/ |
4 | 架构层(Architecture) | 适配不同 CPU 平台,提供启动、中断、MMU 支持 | arch/arm64/ 、arch/x86/ |
arch/arm64/kernel/head.S |
✅ 此模型具有层次分明、逻辑清晰、与源码结构高度一致的优点,建议背熟掌握。
这是 Linux 内核的“中枢神经系统”,为所有模块提供基础能力:
kernel/sched/
mm/
kernel/
和 arch/xxx/
kernel/locking/
lib/
,比如字符串处理、数据结构操作等 示例:mm/memory.c
处理页的分配与回收,是理解物理内存管理的核心文件。
子系统是内核中提供完整功能的一类模块,如:
fs/
net/
drivers/gpu/
,如 i.MX 的 LCDIF 子模块sound/
security/
示例:fs/ext4/
是 ext4 文件系统实现,对应 ext4 格式分区的挂载与管理。
驱动层是 Linux 内核最贴近硬件的一层,种类繁多,包括:
路径统一在 drivers/
下,按类型再细分目录。
示例:drivers/gpu/imx/lcdif/
是 NXP 平台的 LCD 控制器驱动,提供 framebuffer 输出、时序设置、格式配置等。
这一层用于支持不同的 CPU 架构,包括:
路径:arch/arm64/
、arch/x86/
、arch/riscv/
等
示例:arch/arm64/kernel/head.S
是 ARM64 架构下的汇编启动入口。
此外还有:
arch/arm64/boot/
包含启动镜像格式代码arch/arm64/mm/
包含页表、内存区域初始化平台设备驱动(platform_driver
)典型地处于 驱动层 与 子系统层 之间:
platform_driver
platform_device
probe()
绑定资源(寄存器、clock、irq)这体现出 Linux 内核模块之间解耦、自动注册、可扩展的架构设计理念。
Linux 内核源码的顶层目录结构本身也反映了这种分层思想:
linux/
├── arch/ # 架构层
├── drivers/ # 驱动层
├── fs/ # 子系统:文件系统
├── net/ # 子系统:网络协议栈
├── sound/ # 子系统:音频
├── kernel/ # 核心层:调度、信号、fork
├── mm/ # 核心层:内存管理
├── lib/ # 核心层:内核库函数
Kconfig
与 Makefile
,理解编译组织结构当被问到“如何理解 Linux 内核的组成”时,可以回答:
“Linux 内核结构可以从逻辑上分为四层:核心层、子系统层、驱动层、架构层。核心层提供调度、内存、系统调用等基本能力;子系统提供完整功能模块如文件系统、网络协议;驱动层与硬件交互;架构层负责适配不同平台。这种结构清晰、分工明确,也与内核源码目录高度一致。”
理解内核结构,是深入 Linux 世界的“第一道门槛”。你不必一开始就掌握每一层的细节,但必须清楚它们的存在与责任划分。
牢记:只有站得高,才能看得清。
下一篇 Day 6,将继续探索 Linux 内核中某个关键子系统(如设备模型、内存页回收、进程状态转换等),敬请期待。