一文读懂 Linux 6.19.10 内核代码树:目录结构与核心模块功能详解

一文读懂 Linux 6.19.10 内核代码树:目录结构与核心模块功能详解 内核版本Linux 6.19.10前言为什么要理解 Linux 内核代码树Linux 内核是现代操作系统基础设施中最复杂、最关键的开源项目之一。无论是服务器、云平台、Android 手机、嵌入式设备还是容器、虚拟化、网络转发、存储系统其底层都离不开 Linux 内核的支撑。但第一次打开 Linux 内核源码时很多人都会被庞大的目录结构“劝退”arch/ drivers/ fs/ kernel/ mm/ net/ block/ security/ ...这些目录并不是简单的源码分类而是 Linux 内核按照职责划分出来的核心子系统。理解这些目录之间的关系相当于拿到了阅读内核源码的“地图”。本文将基于 Linux 6.19.10 内核代码树从顶层目录出发系统梳理各个核心模块的职责、典型源码文件、模块间依赖关系以及几个值得重点关注的新机制例如 EEVDF 调度器、io_uring、eBPF、Rust for Linux 和 KVM 虚拟化。一、Linux 6.19.10 顶层目录全景Linux 内核源码顶层目录大致可以分为几类体系结构相关代码arch/核心内核机制kernel/、mm/、ipc/、security/I/O 与文件系统fs/、block/、io_uring/设备驱动drivers/、sound/网络协议栈net/公共库与接口定义include/、lib/、crypto/构建、文档与工具scripts/、Documentation/、tools/虚拟化与新语言支持virt/、rust/顶层目录结构如下linux-6.19.10/ ├── arch/ # 体系结构相关代码 ├── block/ # 块设备层 ├── certs/ # 内核签名证书 ├── crypto/ # 软件加密算法库 ├── Documentation/ # 内核文档 ├── drivers/ # 设备驱动程序 ├── fs/ # 文件系统 ├── include/ # 内核头文件 ├── init/ # 内核启动初始化 ├── io_uring/ # 高性能异步 I/O 框架 ├── ipc/ # 进程间通信 ├── kernel/ # 内核核心子系统 ├── lib/ # 通用库函数 ├── LICENSES/ # 许可证文件 ├── mm/ # 内存管理 ├── net/ # 网络协议栈 ├── rust/ # Rust 语言内核支持 ├── samples/ # 示例代码 ├── scripts/ # 构建系统与辅助脚本 ├── security/ # 安全框架 ├── sound/ # 音频子系统 ├── tools/ # 用户空间工具 ├── usr/ # initramfs 相关 └── virt/ # 虚拟化支持可以把 Linux 内核理解为一个分层系统用户空间应用 ↓ 系统调用 kernel/ 核心机制 ↓ mm/ fs/ net/ security/ ↓ block/ drivers/ ↓ arch/ ↓ 硬件二、arch/体系结构适配层arch/是 Linux 内核可移植性的基础。不同 CPU 架构在启动流程、中断入口、页表格式、寄存器布局、系统调用 ABI 等方面差异巨大而这些差异都被封装在arch/目录下。典型架构包括架构目录说明arch/x86/Intel/AMD x86 与 x86_64PC 和服务器主流平台arch/arm/32 位 ARM常见于嵌入式设备arch/arm64/64 位 ARM手机、服务器、Apple M 系列等arch/riscv/RISC-V 开源指令集增长迅速arch/loongarch/龙芯 LoongArch 架构arch/powerpc/IBM POWER/PowerPCarch/s390/IBM 大型机arch/um/User Mode Linux将内核运行为用户进程每个架构目录通常包含arch/x86/ ├── boot/ # 启动引导代码 ├── kernel/ # 中断、异常、系统调用、上下文切换 ├── mm/ # 架构相关内存管理 ├── lib/ # 架构优化库函数 ├── include/asm/ # 架构专用头文件 └── configs/ # 默认配置例如在 x86 平台上内核启动时会经历实模式、保护模式、长模式切换建立早期页表然后进入 C 语言世界中的start_kernel()。这些硬件强相关逻辑都位于arch/x86/下。一句话总结arch/负责把不同硬件平台的差异“藏起来”向上层内核提供统一抽象。三、kernel/内核核心子系统kernel/是 Linux 内核的中枢负责进程生命周期、调度、同步、中断、系统调用、内核线程、cgroup、BPF、RCU 等基础机制。1. 进程管理与进程相关的关键文件包括文件功能fork.c进程创建支持fork()、clone()、vfork()exit.c进程退出核心函数如do_exit()exec.c执行新程序处理execve()signal.c信号处理pid.cPID 分配与管理cred.c进程权限凭证如 UID、GID、Capabilitiesptrace.c进程跟踪调试器和strace的基础用户空间创建进程时最终会进入内核的fork.c。进程退出时则由exit.c负责释放资源、通知父进程、处理僵尸进程等。2. 调度器从 CFS 到 EEVDF调度器源码位于kernel/sched/ ├── core.c # 调度器核心框架 ├── fair.c # 普通进程调度CFS/EEVDF ├── rt.c # 实时调度 ├── deadline.c # Deadline 调度 ├── idle.c # 空闲任务 ├── topology.c # CPU 拓扑感知 ├── pelt.c # PELT 负载跟踪 └── features.h # 调度特性开关Linux 6.x 的普通任务调度已经从传统 CFS 演进到EEVDFEarliest Eligible Virtual Deadline First。相比旧版 CFS 主要依赖虚拟运行时间vruntimeEEVDF 引入了“虚拟截止时间”概念目标是在公平性与延迟之间取得更好的平衡。Linux 调度类按优先级大致如下调度类策略场景stop_sched_class最高优先级CPU 热插拔、迁移等特殊任务dl_sched_classSCHED_DEADLINE硬实时任务rt_sched_classSCHED_FIFO / SCHED_RR实时任务fair_sched_classSCHED_NORMAL / BATCH普通进程idle_sched_classSCHED_IDLECPU 空闲任务调度器是理解 Linux 性能行为的关键模块。CPU 利用率、响应延迟、负载均衡、NUMA 亲和性、大小核调度都与kernel/sched/密切相关。3. RCU读多写少场景下的高性能同步RCU 位于kernel/rcu/ ├── tree.c # 树形 RCU主实现 ├── tiny.c # 单 CPU 简化实现 ├── tasks.c # Tasks RCU └── srcutree.c # SRCU可睡眠 RCURCU 全称是Read-Copy-Update。它允许读路径几乎无锁执行非常适合读多写少的数据结构例如网络路由表文件描述符表dentry cacheBPF 程序替换内核对象生命周期管理RCU 是 Linux 能够在多核系统上保持高扩展性的关键机制之一。4. 锁机制锁相关代码位于kernel/locking/ ├── mutex.c ├── spinlock.c ├── rwsem.c ├── semaphore.c ├── lockdep.c └── qspinlock.c常见同步原语包括类型特点自旋锁spinlock忙等待不可睡眠常用于中断上下文互斥锁mutex可睡眠适合进程上下文读写信号量rwsem读多写少场景信号量semaphore传统同步机制lockdep死锁检测框架5. eBPF 与 cgroupkernel/bpf/实现了 eBPF 虚拟机、验证器、系统调用接口和 Map 类型。eBPF 已经成为 Linux 内核可观测性、网络、安全策略扩展的重要基础。kernel/cgroup/则是容器资源隔离的核心。Docker、Kubernetes 等容器技术大量依赖 cgroup 来限制 CPU、内存、IO 等资源。四、mm/内存管理子系统内存管理是内核中最复杂的部分之一。mm/负责物理内存、虚拟内存、页表、缺页异常、页面回收、NUMA、大页、内存 cgroup 等。核心文件包括mm/ ├── page_alloc.c # 伙伴系统物理页分配 ├── slub.c # SLUB 对象分配器 ├── mmap.c # mmap 与 VMA 管理 ├── memory.c # 缺页异常处理 ├── vmscan.c # 页面回收 ├── oom_kill.c # OOM Killer ├── memcontrol.c # memory cgroup ├── migrate.c # 页面迁移 ├── compaction.c # 内存碎片整理 ├── hugetlb.c # HugeTLB 大页 ├── kasan/ # 内存错误检测 ├── kfence/ # 轻量内存安全检测 └── damon/ # 数据访问监控内存分配链路一个用户态malloc()最终可能触发如下链路应用程序 malloc() ↓ glibc ↓ brk/mmap 系统调用 mm/mmap.c ↓ VMA 管理 ↓ 缺页异常 mm/memory.c ↓ mm/page_alloc.c ↓ 物理页分配而内核态的小对象分配通常经过kmalloc() ↓ SLUB/SLAB ↓ 伙伴系统 ↓ 物理内存伙伴系统与 SLUB伙伴系统以页为单位管理物理内存适合连续页分配。SLUB面向内核对象的小块内存分配器是kmalloc()的重要基础。页面回收与 OOM Killer当内存紧张时vmscan.c负责扫描 LRU 链表并回收页缓存或匿名页。如果回收失败oom_kill.c会选择一个“牺牲进程”杀掉以避免系统彻底失去响应。五、fs/文件系统与 VFSfs/提供虚拟文件系统 VFS 层并实现 ext4、btrfs、xfs、procfs、sysfs、overlayfs 等大量文件系统。VFS 核心VFS 的核心作用是屏蔽底层文件系统差异让用户空间通过统一接口访问文件。关键文件包括文件功能namei.c路径名解析dcache.cdentry 缓存inode.cinode 管理file.c文件对象管理super.c超级块管理open.copen()、close()read_write.cread()、write()eventpoll.cepollpipe.c管道一次open(/etc/passwd)的背后内核要完成路径解析、目录项缓存查找、inode 获取、权限检查、文件对象创建等多个步骤。主流文件系统文件系统特点ext4/Linux 最常用本地文件系统稳定成熟btrfs/写时复制、快照、校验、内置 RAIDxfs/高性能适合大文件和高并发f2fs/面向闪存优化Android 常见erofs/只读压缩文件系统Android 系统分区常见overlayfs/联合挂载Docker 镜像层基础proc//proc进程和内核信息sysfs//sys设备模型和驱动属性debugfs/内核调试接口tracefs/ftrace 追踪接口epoll高性能网络服务的基础fs/eventpoll.c实现了 epoll。Nginx、Redis、Envoy 等高性能服务程序都依赖 epoll 实现大规模连接复用。六、drivers/设备驱动程序drivers/是 Linux 内核中代码量最大的目录约占总代码量的大部分。它负责连接内核和真实硬件。主要分类如下drivers/ ├── ata/ # ATA/SATA/PATA ├── nvme/ # NVMe SSD ├── scsi/ # SCSI 存储 ├── net/ # 网络设备驱动 ├── gpu/ # GPU/DRM/KMS ├── usb/ # USB 协议栈 ├── input/ # 输入设备 ├── pci/ # PCI/PCIe ├── i2c/ # I2C ├── spi/ # SPI ├── gpio/ # GPIO ├── clk/ # 时钟框架 ├── cpufreq/ # CPU 调频 ├── cpuidle/ # CPU 空闲状态 ├── virtio/ # VirtIO 虚拟设备 ├── vfio/ # 设备直通 ├── media/ # 摄像头与视频 ├── iio/ # 工业 IO ├── hwmon/ # 硬件监控 └── staging/ # 待完善驱动存储驱动drivers/nvme/NVMe SSD高性能存储的核心。drivers/scsi/传统 SCSI 栈仍广泛用于服务器。drivers/ata/SATA/PATA 存储设备。网络驱动drivers/net/包含以太网、无线网卡、虚拟网卡等驱动。例如Intel/Realtek/Mellanox 以太网WiFi 驱动virtio_net.c虚拟网卡tun.cTUN/TAP 设备VPN 和容器网络常用GPU 与显示GPU 驱动集中在drivers/gpu/drm/drivers/gpu/drm/ ├── i915/ # Intel 集成显卡 ├── amd/ # AMDGPU ├── nouveau/ # NVIDIA 开源驱动 ├── virtio/ # 虚拟 GPU └── panel/ # 显示面板DRM/KMS 是现代 Linux 图形栈的内核基础。虚拟化相关驱动virtio/半虚拟化设备框架。vfio/设备直通让虚拟机直接访问硬件。vhost/内核态 VirtIO 后端。七、net/网络协议栈net/实现了 Linux 的完整网络协议栈从 Socket 到 TCP/IP、netfilter、XDP、无线网络、蓝牙协议等。核心结构如下net/ ├── core/ # 网络核心 ├── ipv4/ # IPv4 协议栈 ├── ipv6/ # IPv6 协议栈 ├── netfilter/ # 防火墙与包过滤 ├── bridge/ # 网桥 ├── wireless/ # 无线网络框架 ├── bluetooth/ # 蓝牙协议栈 ├── unix/ # Unix Domain Socket ├── packet/ # 原始包捕获 ├── xdp/ # 高性能包处理 ├── bpf/ # 网络 BPF ├── sched/ # 流量控制 ├── tls/ # 内核 TLS └── mptcp/ # 多路径 TCPTCP/IPIPv4 相关代码位于net/ipv4/文件功能tcp.cTCP 核心tcp_input.cTCP 接收处理tcp_output.cTCP 发送处理tcp_cubic.cCUBIC 拥塞控制tcp_bbr.cBBR 拥塞控制udp.cUDProute.cIPv4 路由icmp.cICMPping 的基础netfilter防火墙与 NATnet/netfilter/是 iptables/nftables 的内核基础支持包过滤、NAT、连接跟踪、负载均衡等能力。XDP高速网络包处理XDP 即eXpress Data Path允许在网络包进入协议栈之前执行 eBPF 程序。它适合DDoS 防护高性能负载均衡包过滤网络可观测性数据中心转发加速八、block/块设备层block/位于文件系统和存储驱动之间负责统一块设备抽象、请求队列、IO 调度、cgroup IO 控制等。核心文件包括block/ ├── blk-core.c # 块层核心 ├── blk-mq.c # 多队列块层 ├── blk-mq-sched.c # MQ 调度器框架 ├── blk-cgroup.c # 块设备 cgroup ├── blk-throttle.c # IO 限速 ├── elevator.c # IO 调度器框架 ├── bfq-iosched.c # BFQ 调度器 ├── kyber-iosched.c # Kyber 调度器 ├── mq-deadline.c # MQ Deadline 调度器 ├── blk-zoned.c # 分区块设备 └── bio.c # BIO 基本请求单元blk-mq多队列块层现代 NVMe SSD 支持多队列并发提交。传统单队列块层无法充分发挥硬件能力因此 Linux 引入了 blk-mqCPU 本地提交队列 ↓ 硬件提交队列 ↓ NVMe 控制器blk-mq 显著降低了锁竞争提高了多核系统上的存储 I/O 吞吐能力。IO 调度器常见 IO 调度器包括调度器特点BFQ注重交互体验和公平性Kyber面向低延迟设备优化MQ-Deadline提供截止时间保证防止饥饿九、security/安全框架Linux 安全框架的核心是 LSM即Linux Security Module。它允许多个安全模块在关键内核路径上注册钩子从而实现访问控制。目录结构security/ ├── security.c # LSM 框架核心 ├── commoncap.c # Capabilities ├── selinux/ # SELinux ├── apparmor/ # AppArmor ├── smack/ # SMACK ├── tomoyo/ # TOMOYO ├── landlock/ # Landlock ├── integrity/ # IMA/EVM ├── keys/ # 内核密钥管理 └── bpf/ # BPF LSM主要安全机制模块说明SELinux强制访问控制常见于服务器和 AndroidAppArmor基于路径的访问控制Ubuntu 默认Landlock用户态可用的沙箱机制无需 rootIMA/EVM文件完整性度量与验证Keys内核密钥管理BPF LSM使用 eBPF 实现安全策略扩展安全模块通常会在文件访问、进程创建、Socket 操作、权限检查等路径上介入。十、init/内核启动入口init/负责内核从启动到运行第一个用户态进程的全过程。关键文件init/ ├── main.c # start_kernel() ├── do_mounts.c # 挂载根文件系统 ├── do_mounts_initrd.c # initrd 支持 ├── initramfs.c # initramfs 解压 ├── calibrate.c # BogoMIPS 校准 └── init_task.c # 初始任务内核启动流程可以概括为上电/复位 ↓ BIOS/UEFI ↓ Bootloader ↓ arch/x86/boot/ ↓ arch/x86/kernel/head_64.S ↓ init/main.c:start_kernel() ├── 初始化内存管理 ├── 初始化调度器 ├── 初始化中断 ├── 初始化时钟 ├── 初始化各子系统 └── rest_init() ├── 创建 kernel_init ├── 创建 kthreadd └── 进入 idle ↓ 执行 /sbin/initstart_kernel()是阅读 Linux 启动流程时最重要的函数之一。十一、include/内核接口定义中心include/定义了内核子系统之间的接口、数据结构、宏和常量。重要目录include/ ├── linux/ # 通用内核头文件 ├── asm-generic/ # 架构无关汇编级头文件 ├── uapi/ # 用户空间 API ├── net/ # 网络头文件 ├── drm/ # DRM 图形框架 ├── dt-bindings/ # 设备树绑定 ├── media/ # V4L2/DVB ├── rdma/ # RDMA ├── scsi/ # SCSI ├── sound/ # ALSA └── trace/ # 追踪框架常见头文件文件功能include/linux/sched.htask_struct等进程结构include/linux/mm_types.h内存管理类型include/linux/fs.hVFS 核心结构include/linux/list.h内核链表include/linux/rbtree.h红黑树include/linux/spinlock.h自旋锁include/linux/mutex.h互斥锁include/linux/module.h内核模块接口include/uapi/暴露给用户空间的 ABI其中uapi/非常重要因为它定义了用户空间可见接口必须保持 ABI 稳定。十二、crypto/与lib/算法和公共库crypto加密算法库crypto/提供内核中的通用软件加密算法crypto/ ├── aes_generic.c ├── sha256_generic.c ├── sha512_generic.c ├── rsa.c ├── ecdh.c ├── chacha20poly1305.c ├── gcm.c ├── hmac.c ├── drbg.c ├── lz4.c ├── zstd.c └── api.c这些能力可被以下模块使用IPsecdm-cryptfscryptTLS随机数生成文件完整性校验lib通用数据结构和算法lib/提供内核各处复用的数据结构和工具函数lib/ ├── rbtree.c ├── list_sort.c ├── bitmap.c ├── string.c ├── vsprintf.c ├── idr.c ├── xarray.c ├── radix-tree.c ├── kfifo.c ├── crc32.c ├── kunit/ └── test_*.c例如调度器和内存管理大量使用红黑树。页缓存索引曾大量依赖 radix tree现在逐步使用 XArray。vsprintf.c是printk()格式化输出的重要基础。十三、ipc/进程间通信ipc/实现 System V IPC 和 POSIX IPCipc/ ├── msg.c # 消息队列 ├── sem.c # 信号量 ├── shm.c # 共享内存 ├── mqueue.c # POSIX 消息队列 ├── namespace.c # IPC 命名空间 └── syscall.c # IPC 系统调用入口这些机制虽然历史较久但仍被数据库、中间件和传统 UNIX 程序广泛使用。在容器场景中IPC namespace 用于隔离不同容器之间的 IPC 对象。十四、io_uring/新一代高性能异步 I/Oio_uring是 Linux 5.1 引入的高性能异步 I/O 框架核心思想是通过用户态和内核态共享环形队列减少系统调用开销。源码结构io_uring/ ├── io_uring.c ├── io-wq.c ├── net.c ├── files.c ├── poll.c ├── timeout.c ├── sqpoll.c └── register.c传统 I/O 模型通常是用户态提交请求 ↓ syscall 内核执行 ↓ syscall 返回 用户态获取结果而 io_uring 使用两个环SQSubmission Queue提交队列CQCompletion Queue完成队列用户态写 SQ ↓ 内核消费 SQ 并执行 I/O ↓ 内核写 CQ ↓ 用户态读取 CQ在 SQPOLL 模式下甚至可以减少频繁系统调用非常适合高性能存储、网络服务和数据库场景。十五、virt/KVM 虚拟化核心virt/主要包含 KVM 核心代码virt/ ├── kvm/ │ ├── kvm_main.c │ ├── mmu/ │ ├── irqchip.c │ └── eventfd.c └── lib/KVM 将 Linux 内核变成一个 Hypervisor。它和硬件虚拟化扩展配合工作Intel VT-xAMD-VARM virtualization extensionsKVM 的关键职责包括虚拟机创建与生命周期管理vCPU 管理虚拟内存管理中断虚拟化与 QEMU 等用户态 VMM 协作典型虚拟化栈如下虚拟机应用 ↓ Guest Kernel ↓ QEMU ↓ ioctl KVM ↓ 硬件虚拟化扩展十六、rust/Rust for LinuxLinux 6.1 开始引入 Rust 作为第二种内核编程语言。rust/目录提供 Rust 内核模块和驱动开发所需的基础设施。rust/ ├── kernel/ │ ├── lib.rs │ ├── alloc.rs │ ├── sync/ │ ├── net/ │ └── driver.rs ├── macros/ └── bindgen_parametersRust 引入内核的主要目标不是替代 C而是在部分新驱动中降低内存安全问题空指针Use-after-free越界访问数据竞争生命周期错误Rust for Linux 仍处于持续演进阶段但它代表了内核开发在安全性方向的重要探索。十七、模块间依赖关系Linux 内核并不是一堆孤立模块而是一个层次清晰、相互协作的系统。可以用下面的图表示┌──────────────────────────────────────────────┐ │ 用户空间应用程序 │ │ glibc / syscall / proc / sys / dev │ └──────────────────────┬───────────────────────┘ │ ▼ ┌──────────────────────────────────────────────┐ │ kernel/ 核心子系统 │ │ 进程管理 调度 信号 RCU 锁 BPF cgroup 审计 │ └──────┬────────────┬────────────┬──────────────┘ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ mm/ │ │ fs/ │ │ net/ │ │ 内存管理 │ │ 文件系统 │ │ 网络协议 │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └─────────────┼─────────────┘ ▼ ┌──────────────────────────────────────────────┐ │ block/ 块设备层 │ │ blk-mq / IO scheduler / BIO │ └──────────────────────┬───────────────────────┘ ▼ ┌──────────────────────────────────────────────┐ │ drivers/ 设备驱动 │ │ NVMe 网络 GPU USB PCI VirtIO VFIO │ └──────────────────────┬───────────────────────┘ ▼ ┌──────────────────────────────────────────────┐ │ arch/ 体系结构层 │ │ x86 arm64 riscv loongarch powerpc │ └──────────────────────┬───────────────────────┘ ▼ 物理硬件需要注意的是这只是一个简化图。真实内核中模块之间存在大量交叉关系fs/依赖mm/做页缓存和内存映射。net/依赖mm/分配sk_buff。drivers/会注册到block/、net/、input/等框架。security/通过 LSM 钩子嵌入几乎所有关键路径。kernel/bpf/与net/、trace/、security/深度集成。cgroup同时影响 CPU、内存、IO、网络等资源控制。十八、构建系统与开发辅助文件除了核心源码Linux 顶层还有一些非常重要的构建和维护文件文件/目录作用Makefile顶层构建文件Kconfig配置系统入口Kbuild内核构建规则.config当前内核配置scripts/构建、检查、配置辅助脚本MAINTAINERS子系统维护者信息COPYINGGPL v2 许可证Documentation/内核设计文档、API 文档、设备树绑定等tools/用户空间工具如 perf、bpftool如果要学习内核开发Documentation/和tools/同样值得关注。很多子系统的设计理念、使用方法和调试方式都可以在文档中找到。十九、如何阅读 Linux 内核源码面对如此庞大的代码树不建议从顶层目录逐个文件“平铺式阅读”。更有效的方法是按场景切入。1. 从系统调用切入例如想理解文件打开open() ↓ fs/open.c ↓ VFS ↓ 具体文件系统 ↓ block 层 ↓ 存储驱动2. 从性能问题切入例如 CPU 调度延迟kernel/sched/core.c kernel/sched/fair.c kernel/sched/pelt.c kernel/sched/topology.c3. 从内存问题切入例如 OOMmm/page_alloc.c mm/vmscan.c mm/oom_kill.c mm/memcontrol.c4. 从设备驱动切入例如 NVMedrivers/nvme/ block/blk-mq.c block/bio.c5. 从容器技术切入kernel/cgroup/ kernel/pid_namespace.c kernel/user_namespace.c fs/overlayfs/ net/netfilter/ security/二十、总结Linux 6.19.10 的代码树体现了 Linux 内核几十年来持续演进形成的工程结构arch/负责硬件平台差异。kernel/提供调度、进程、同步、BPF、cgroup 等核心机制。mm/管理物理内存和虚拟内存。fs/通过 VFS 抽象不同文件系统。drivers/连接内核和真实硬件。net/实现完整网络协议栈。block/管理块设备和 I/O 调度。security/提供 LSM 安全框架。io_uring/、rust/、virt/则代表了高性能 I/O、安全语言和虚拟化方向的持续演进。学习 Linux 内核的关键不是一次性记住所有目录和文件而是建立一张清晰的地图知道每个模块解决什么问题知道遇到某类问题时应该去哪里找代码。当你能把一次系统调用、一次网络收包、一次页面分配、一次进程调度串成完整链路时Linux 内核代码树就不再是一片迷宫而是一座结构严密、层次清晰的操作系统工程大厦。