顶层目录结构

linux-6.19.10/
├── arch/                ← 体系结构相关代码(CPU平台适配)
├── block/               ← 块设备层(磁盘I/O调度)
├── certs/               ← 内核签名证书(安全启动)
├── crypto/              ← 软件加密算法库
├── Documentation/       ← 内核文档
├── drivers/             ← 设备驱动程序(代码量最大)
├── fs/                  ← 文件系统(VFS + 各具体FS)
├── include/             ← 头文件(内核API定义)
├── init/                ← 内核启动初始化
├── io_uring/            ← 高性能异步I/O框架
├── ipc/                 ← 进程间通信
├── kernel/              ← 核心子系统(调度/信号/锁等)
├── lib/                 ← 通用库函数
├── LICENSES/            ← 许可证文件
├── mm/                  ← 内存管理子系统
├── net/                 ← 网络协议栈
├── rust/                ← Rust语言内核模块支持
├── samples/             ← 内核编程示例代码
├── scripts/             ← 构建系统与辅助脚本
├── security/            ← 安全框架(LSM/SELinux等)
├── sound/               ← 音频子系统(ALSA)
├── tools/               ← 用户空间工具(perf/bpftool等)
├── usr/                 ← initramfs 相关
└── virt/                ← 虚拟化支持(KVM)

一、arch/ — 体系结构相关代码

核心作用:为不同 CPU 架构提供硬件抽象层,是内核可移植性的基础。每个架构子目录封装了该平台的启动代码、中断处理、上下文切换、内存页表、系统调用入口等所有与硬件强相关的代码。

arch/
├── alpha/        # DEC Alpha 64位处理器(历史遗留)
├── arc/          # ARC 处理器(Synopsys嵌入式)
├── arm/          # ARM 32位(大量手机/嵌入式设备)
├── arm64/        # ARM 64位 AArch64(现代手机/服务器/Apple M系列)
├── csky/         # 中天微 C-SKY 处理器(国产嵌入式)
├── hexagon/      # 高通 Hexagon DSP 处理器
├── loongarch/    # 龙芯 LoongArch(国产服务器/桌面CPU)
├── m68k/         # Motorola 68000 系列(历史遗留)
├── microblaze/   # Xilinx MicroBlaze FPGA软核处理器
├── mips/         # MIPS 处理器(路由器/网络设备/嵌入式)
├── nios2/        # Altera Nios II FPGA软核处理器
├── openrisc/     # OpenRISC 开源处理器架构
├── parisc/       # HP PA-RISC 处理器
├── powerpc/      # IBM PowerPC/POWER(服务器/嵌入式/游戏机)
├── riscv/        # RISC-V 开源指令集(快速增长)
├── s390/         # IBM System/390 大型机
├── sh/           # SuperH(日立,汽车电子/嵌入式)
├── sparc/        # Sun/Oracle SPARC 处理器
├── um/           # User Mode Linux(将内核作为用户进程运行)
├── x86/          # Intel/AMD x86 & x86_64(PC/服务器主流平台)
└── xtensa/       # Tensilica Xtensa(IoT/音频DSP)

每个架构目录的通用结构:

子目录/文件 功能
boot/ 启动引导代码,从 bootloader 接管控制权
kernel/ 中断/异常处理、上下文切换、系统调用入口
mm/ 架构相关内存管理(页表结构、TLB刷新)
lib/ 架构优化的字符串/内存操作(如 SIMD 加速的 memcpy)
include/asm/ 架构专用头文件(寄存器定义、内存布局)
configs/ 该架构的默认内核配置文件

二、kernel/ — 核心子系统

核心作用:内核最基础的功能实现,包括进程生命周期管理、CPU调度、信号处理、系统调用、内核线程、同步原语等。

kernel/
├── sched/               # ★ 进程调度器(最核心模块之一)
│   ├── core.c           #   调度器框架核心(schedule()主函数)
│   ├── fair.c           #   CFS/EEVDF 完全公平调度算法
│   ├── rt.c             #   实时调度(SCHED_FIFO / SCHED_RR)
│   ├── deadline.c       #   EDF 截止时间调度(SCHED_DEADLINE)
│   ├── idle.c           #   CPU空闲任务调度
│   ├── topology.c       #   CPU拓扑感知(NUMA/SMT/大小核)
│   ├── loadavg.c        #   系统负载均值计算
│   ├── stats.c          #   调度统计信息
│   ├── autogroup.c      #   自动任务分组
│   ├── cpudeadline.c    #   截止时间CPU管理
│   ├── cpupri.c         #   CPU优先级管理
│   ├── pelt.c           #   每实体负载跟踪(PELT算法)
│   ├── features.h       #   调度特性开关(运行时可调)
│   └── debug.c          #   调度器调试接口
│
├── rcu/                 # ★ RCU(读-拷贝-更新)无锁同步机制
│   ├── tree.c           #   树形RCU(主要实现,可扩展到大量CPU)
│   ├── tiny.c           #   微型RCU(单CPU系统)
│   ├── tasks.c          #   任务RCU(用于追踪/BPF)
│   └── srcutree.c       #   可睡眠RCU(SRCU)
│
├── locking/             # 锁机制实现
│   ├── mutex.c          #   互斥锁(可睡眠)
│   ├── spinlock.c       #   自旋锁(忙等待)
│   ├── rwsem.c          #   读写信号量
│   ├── rwlock.c         #   读写锁
│   ├── semaphore.c      #   信号量
│   ├── lockdep.c        #   死锁检测框架(开发调试用)
│   └── qspinlock.c      #   队列自旋锁(NUMA优化)
│
├── irq/                 # 中断管理框架
│   ├── manage.c         #   中断注册/注销/使能/禁用
│   ├── chip.c           #   中断控制器抽象层
│   ├── irqdomain.c      #   中断域(硬件IRQ→Linux IRQ映射)
│   └── affinity.c       #   中断亲和性(绑定到特定CPU)
│
├── power/               # 电源管理
│   ├── main.c           #   suspend/resume 主流程
│   ├── hibernate.c      #   休眠(保存内存到磁盘)
│   ├── wakeup.c         #   唤醒源管理
│   └── autosleep.c      #   自动睡眠
│
├── time/                # 时间管理
│   ├── hrtimer.c        #   高精度定时器
│   ├── timer.c          #   低精度定时器(jiffies)
│   ├── clocksource.c    #   时钟源管理
│   ├── clockevents.c    #   时钟事件设备
│   ├── timekeeping.c    #   系统时间维护
│   └── posix-timers.c   #   POSIX定时器(timer_create等)
│
├── trace/               # 内核追踪框架
│   ├── trace.c          #   ftrace 核心
│   ├── ring_buffer.c    #   环形缓冲区(追踪数据存储)
│   ├── trace_events.c   #   追踪事件框架
│   └── bpf_trace.c      #   BPF追踪支持
│
├── bpf/                 # ★ eBPF 虚拟机
│   ├── core.c           #   BPF解释器/JIT编译器
│   ├── verifier.c       #   BPF程序安全验证器
│   ├── syscall.c        #   BPF系统调用
│   ├── helpers.c        #   BPF辅助函数
│   └── map_*.c          #   各类BPF Map(哈希/数组/LRU等)
│
├── cgroup/              # ★ 控制组(容器基础)
│   ├── cgroup.c         #   cgroup核心框架
│   ├── cgroup-v1.c      #   cgroup v1接口
│   └── cgroup-v2.c      #   cgroup v2接口(统一层级)
│
├── events/              # perf 性能事件
├── futex/               # 快速用户空间互斥锁(pthread_mutex基础)
├── module/              # 内核模块加载/卸载(insmod/rmmod)
├── printk/              # 内核日志系统(dmesg输出)
├── debug/               # 调试工具(kgdb、kdb)
├── gcov/                # 代码覆盖率支持
├── kcsan/               # 内核并发安全分析器(数据竞争检测)
├── livepatch/           # ★ 热补丁(不重启修复内核漏洞)
├── liveupdate/          # 内核热更新
├── entry/               # 系统调用/中断入口通用代码
├── dma/                 # DMA 引擎框架
│
├── fork.c               # 进程创建(fork/clone/vfork)
├── exit.c               # 进程退出(do_exit)
├── exec.c               # 程序执行(execve系统调用)
├── signal.c             # 信号处理(kill/sigaction等)
├── sys.c                # 通用系统调用实现
├── ptrace.c             # 进程跟踪(调试器/strace基础)
├── workqueue.c          # 内核工作队列(异步任务执行)
├── kthread.c            # 内核线程管理
├── panic.c              # 内核崩溃处理(Oops/Panic)
├── kprobes.c            # 动态探针(运行时插桩)
├── seccomp.c            # 系统调用过滤(安全沙箱)
├── cred.c               # 进程凭证(uid/gid/capabilities)
├── pid.c                # 进程ID分配与管理
├── pid_namespace.c      # PID命名空间(容器隔离)
├── smp.c                # 对称多处理器支持
├── smpboot.c            # SMP启动(CPU热插拔)
├── softirq.c            # 软中断处理(网络/块设备下半部)
├── kexec.c              # 内核热重启(kexec/kdump)
├── watchdog.c           # 软件看门狗(系统挂死检测)
├── notifier.c           # 通知链(事件广播机制)
├── params.c             # 内核参数(/sys/module/*/parameters)
├── sysctl.c             # sysctl接口(/proc/sys/)
├── capability.c         # Linux Capabilities(细粒度权限)
├── user_namespace.c     # 用户命名空间(容器权限隔离)
├── nsproxy.c            # 命名空间代理(容器隔离框架)
├── resource.c           # 系统资源限制(rlimit)
├── audit.c              # 内核审计框架(安全日志)
├── tracepoint.c         # 静态追踪点框架
├── jump_label.c         # 跳转标签(零开销特性开关)
├── kallsyms.c           # 内核符号表(/proc/kallsyms)
├── padata.c             # 并行数据处理框架
├── async.c              # 异步函数调用框架
├── relay.c              # 内核→用户空间数据中继
└── crash_core.c         # 崩溃转储核心(kdump)

调度器详解(kernel/sched/

Linux 6.x 调度器采用 EEVDF(Earliest Eligible Virtual Deadline First) 算法替代旧版 CFS:

调度类 策略 适用场景
stop_sched_class 最高优先级 CPU迁移、热插拔
dl_sched_class SCHED_DEADLINE 硬实时任务(EDF算法)
rt_sched_class SCHED_FIFO/RR 软实时任务(音视频)
fair_sched_class SCHED_NORMAL/BATCH 普通进程(EEVDF算法)
idle_sched_class SCHED_IDLE CPU空闲任务

三、mm/ — 内存管理子系统

核心作用:管理系统的物理内存和虚拟内存,提供内存分配、回收、映射、保护等全套机制。

mm/
├── page_alloc.c         # ★ 伙伴系统(物理页分配器)
├── slub.c               # ★ SLUB 对象缓存分配器(kmalloc基础)
├── slab.c               #   SLAB 分配器(旧版)
├── vmalloc.c            #   虚拟地址连续分配(vmalloc)
├── mmap.c               #   内存映射(mmap系统调用)
├── memory.c             #   缺页异常处理(page fault handler)
├── swap.c               #   交换空间管理
├── swapfile.c           #   交换文件/分区管理
├── vmscan.c             #   页面回收(LRU算法,kswapd)
├── oom_kill.c           #   OOM Killer(内存耗尽时选择并杀死进程)
├── hugetlb.c            #   大页内存(HugeTLB,2MB/1GB页)
├── memcontrol.c         #   内存 cgroup(容器内存限制)
├── migrate.c            #   页面迁移(NUMA优化/内存碎片整理)
├── compaction.c         #   内存碎片整理(合并小页为大页)
├── mprotect.c           #   内存保护(mprotect系统调用)
├── mremap.c             #   内存重映射(mremap系统调用)
├── mlock.c              #   内存锁定(防止换出,mlock)
├── mincore.c            #   内存驻留查询(mincore)
├── madvise.c            #   内存使用建议(madvise,预读/释放)
├── numa.c               #   NUMA 策略(内存节点亲和性)
├── numa_memblks.c       #   NUMA 内存块管理
├── page_table_check.c   #   页表一致性检查
├── page_isolation.c     #   页面隔离(内存热插拔)
├── memory_hotplug.c     #   内存热插拔支持
├── sparse.c             #   稀疏内存模型(大地址空间)
├── memblock.c           #   早期启动内存分配器
├── bootmem.c            #   启动时内存管理
├── usercopy.c           #   用户/内核空间数据拷贝安全检查
├── util.c               #   内存管理工具函数
├── kasan/               #   ★ 内核地址消毒器(内存越界/UAF检测)
├── kfence/              #   轻量级内存安全检测(生产环境可用)
├── damon/               #   数据访问监控(智能内存管理优化)
│   ├── core.c           #     DAMON核心框架
│   ├── vaddr.c          #     虚拟地址监控
│   └── paddr.c          #     物理地址监控
└── zsmalloc.c           #   压缩内存分配器(zswap/zram使用)

内存分配器层次:

应用程序 malloc()
    ↓
glibc (brk/mmap 系统调用)
    ↓
mm/mmap.c (虚拟内存区域 VMA 管理)
    ↓
mm/memory.c (缺页异常 → 分配物理页)
    ↓
mm/slub.c (小对象缓存,< 8KB)
    ↓
mm/page_alloc.c (伙伴系统,物理页分配)
    ↓
物理内存

四、fs/ — 文件系统

核心作用:提供 VFS(虚拟文件系统)统一抽象层,屏蔽底层文件系统差异,并实现数十种具体文件系统。

fs/
├── # ═══ VFS 核心层 ═══
├── namei.c              # 路径名解析(路径字符串 → inode)
├── dcache.c             # 目录项缓存(dentry cache,加速路径查找)
├── inode.c              # inode 管理(文件元数据)
├── file.c               # 文件对象管理(打开文件表)
├── super.c              # 超级块管理(文件系统挂载信息)
├── namespaces.c         # 挂载命名空间
├── namespace.c          # 挂载点管理
├── exec.c               # 程序执行(execve,加载ELF/脚本)
├── binfmt_elf.c         # ELF 可执行文件格式解析
├── binfmt_script.c      # 脚本文件(#!解释器)执行
├── pipe.c               # 管道实现(|操作符基础)
├── eventpoll.c          # ★ epoll 实现(高性能IO多路复用)
├── select.c             # select/poll 实现
├── aio.c                # POSIX 异步IO
├── read_write.c         # read/write 系统调用
├── open.c               # open/close/creat 系统调用
├── stat.c               # stat/fstat 系统调用
├── fcntl.c              # fcntl 文件控制
├── ioctl.c              # ioctl 设备控制
├── locks.c              # 文件锁(flock/fcntl锁)
├── attr.c               # 文件属性修改(chmod/chown)
├── xattr.c              # 扩展属性(SELinux标签等)
├── quota/               # 磁盘配额管理
├── notify/              # 文件系统通知(inotify/fanotify)
│
├── # ═══ 本地文件系统 ═══
├── ext4/                # ★ ext4(Linux最常用,日志,支持大文件)
├── btrfs/               # ★ Btrfs(写时复制,快照,内置RAID,校验)
├── xfs/                 # ★ XFS(高性能,适合大文件和高并发)
├── f2fs/                # F2FS(闪存友好,Android内部存储)
├── erofs/               # EROFS(只读压缩,Android系统分区)
├── ext2/                # ext2(简单经典,无日志)
├── jfs/                 # JFS(IBM日志文件系统)
├── nilfs2/              # NILFS2(日志结构,连续写入优化)
├── ntfs3/               # NTFS(Windows文件系统,完整读写)
├── exfat/               # exFAT(U盘/SD卡,跨平台)
├── fat/                 # FAT12/16/32(兼容性最广)
│
├── # ═══ 网络文件系统 ═══
├── nfs/                 # NFS 客户端(v3/v4/v4.1/v4.2)
├── nfsd/                # NFS 服务端
├── ceph/                # Ceph 分布式文件系统客户端
├── smb/                 # SMB/CIFS(Windows网络共享)
├── afs/                 # AFS(Andrew分布式文件系统)
├── 9p/                  # Plan 9 文件协议(虚拟机文件共享)
│
├── # ═══ 特殊/虚拟文件系统 ═══
├── proc/                # /proc(进程信息、内核参数)
├── sysfs/               # /sys(设备树、驱动属性)
├── debugfs/             # /sys/kernel/debug(内核调试接口)
├── tracefs/             # /sys/kernel/tracing(ftrace接口)
├── tmpfs/               # 内存文件系统(/tmp, /dev/shm)
├── devpts/              # 伪终端设备(/dev/pts/)
├── overlayfs/           # ★ 联合挂载(Docker容器镜像层基础)
├── fuse/                # 用户空间文件系统框架(FUSE)
├── kernfs/              # 内核文件系统基础框架(sysfs/cgroup使用)
├── configfs/            # 用户可配置的内核对象文件系统
├── pstore/              # 持久存储(崩溃日志保存)
│
├── # ═══ 嵌入式/只读文件系统 ═══
├── squashfs/            # SquashFS(只读压缩,嵌入式/LiveCD)
├── cramfs/              # CramFS(嵌入式只读压缩)
├── romfs/               # ROMFS(极简只读文件系统)
├── jffs2/               # JFFS2(NOR Flash日志文件系统)
├── ubifs/               # UBIFS(NAND Flash,UBI层之上)
│
└── # ═══ 其他 ═══
    ├── isofs/           # ISO 9660(CD-ROM光盘)
    ├── udf/             # UDF(DVD/蓝光光盘)
    ├── hfs/             # HFS(旧版Mac文件系统)
    ├── hfsplus/         # HFS+(Mac OS X文件系统)
    ├── ocfs2/           # OCFS2(Oracle集群文件系统)
    ├── gfs2/            # GFS2(Red Hat集群文件系统)
    ├── dlm/             # DLM(分布式锁管理器)
    ├── ecryptfs/        # eCryptfs(加密文件系统层)
    ├── verity/          # fs-verity(文件完整性验证)
    └── unicode/         # Unicode 字符集支持

五、drivers/ — 设备驱动程序

核心作用:Linux 代码量最大的目录(约占总代码60%),包含所有硬件设备的驱动程序。

drivers/
├── # ═══ 存储设备 ═══
├── ata/                 # ATA/SATA/PATA 硬盘驱动(libata框架)
├── nvme/                # ★ NVMe 固态硬盘驱动(高性能SSD)
├── scsi/                # SCSI 存储框架(HDD/SSD/磁带)
├── mmc/                 # SD卡/eMMC/SDIO 驱动
├── ufs/                 # UFS(手机高速存储)
├── nvdimm/              # 非易失性内存(PMEM/NVDIMM)
├── md/                  # 软件RAID(md/dm-raid)
├── block/               # 块设备驱动(loop/nbd/zram等)
│
├── # ═══ 网络设备 ═══
├── net/                 # ★ 网络设备驱动
│   ├── ethernet/        #   有线以太网(Intel/Realtek/Mellanox等)
│   ├── wireless/        #   WiFi驱动(Intel/Qualcomm/Broadcom等)
│   ├── virtio_net.c     #   VirtIO虚拟网卡
│   ├── loopback.c       #   回环设备(lo)
│   └── tun.c            #   TUN/TAP虚拟网络设备(VPN基础)
├── infiniband/          # InfiniBand 高速网络(HPC/数据中心)
│
├── # ═══ 图形显示 ═══
├── gpu/                 # ★ GPU 驱动(DRM/KMS框架)
│   ├── drm/             #   DRM核心框架
│   │   ├── i915/        #   Intel 集成显卡驱动
│   │   ├── amd/         #   AMD GPU驱动(AMDGPU)
│   │   ├── nouveau/     #   Nvidia GPU开源驱动
│   │   ├── virtio/      #   虚拟化GPU
│   │   └── panel/       #   显示面板驱动
│   └── accel/           #   AI加速器(NPU/TPU)
│
├── # ═══ USB ═══
├── usb/                 # USB 完整驱动栈
│   ├── host/            #   USB主机控制器(xHCI/eHCI/oHCI)
│   ├── gadget/          #   USB设备模式(USB Gadget框架)
│   ├── serial/          #   USB转串口
│   ├── storage/         #   USB存储设备
│   └── typec/           #   USB Type-C 支持
│
├── # ═══ 输入设备 ═══
├── input/               # 输入设备框架
│   ├── keyboard/        #   键盘驱动
│   ├── mouse/           #   鼠标驱动
│   ├── touchscreen/     #   触摸屏驱动
│   └── joystick/        #   游戏手柄驱动
├── hid/                 # HID(人机接口设备)协议驱动
│
├── # ═══ 总线与接口 ═══
├── pci/                 # PCI/PCIe 总线驱动框架
├── i2c/                 # I2C 总线驱动框架
├── spi/                 # SPI 总线驱动框架
├── gpio/                # GPIO 通用输入输出框架
├── pinctrl/             # 引脚控制(复用/配置)
├── amba/                # ARM AMBA 总线
├── platform/            # 平台设备驱动
│
├── # ═══ 电源与时钟 ═══
├── clk/                 # 时钟管理框架(CCF)
├── cpufreq/             # CPU 动态调频(DVFS)
├── cpuidle/             # CPU 空闲状态管理(C-states)
├── power/               # 电源管理驱动(电池/充电/PMIC)
├── powercap/            # 功耗上限控制(RAPL等)
├── thermal/             # 温度传感器与散热管理
├── regulator/           # 电压/电流调节器框架
├── acpi/                # ACPI 电源/配置接口(PC平台)
│
├── # ═══ 虚拟化 ═══
├── virtio/              # ★ VirtIO 虚拟化设备框架
├── vfio/                # VFIO 设备直通(虚拟机直接访问硬件)
├── vhost/               # vhost(内核态virtio后端)
├── hv/                  # Hyper-V 虚拟化支持
├── xen/                 # Xen 虚拟化支持
│
├── # ═══ 安全与加密 ═══
├── crypto/              # 硬件加密加速器驱动
├── tee/                 # TEE(可信执行环境,TrustZone)
├── cxl/                 # CXL(Compute Express Link)
│
├── # ═══ 多媒体 ═══
├── media/               # 摄像头/视频采集(V4L2框架)
├── sound/               # 音频驱动(ALSA框架)
├── bluetooth/           # 蓝牙驱动
├── nfc/                 # NFC 近场通信
│
├── # ═══ 工业/嵌入式 ═══
├── iio/                 # 工业IO框架(传感器/ADC/DAC)
├── hwmon/               # 硬件监控(温度/电压/风扇转速)
├── rtc/                 # 实时时钟驱动
├── watchdog/            # 硬件看门狗驱动
├── pwm/                 # PWM(脉宽调制)框架
├── can/                 # CAN总线(汽车/工业网络)
├── w1/                  # 单总线(1-Wire)设备
│
├── # ═══ 其他 ═══
├── tty/                 # 终端/串口驱动(TTY框架)
├── char/                # 字符设备(随机数/内存设备/打印机)
├── dma/                 # DMA 引擎驱动
├── firmware/            # 固件加载框架
├── iommu/               # IOMMU(设备内存隔离/虚拟化)
├── perf/                # 性能计数器驱动(PMU)
├── edac/                # 内存错误检测与纠正
├── ras/                 # 可靠性/可用性/可维护性
├── staging/             # 未成熟驱动(待完善后移入正式目录)
└── android/             # Android 专用驱动(Binder IPC等)

六、net/ — 网络协议栈

核心作用:实现完整的网络协议栈,从物理层接口到应用层协议,支持数十种网络协议。

net/
├── core/                # 网络核心
│   ├── dev.c            #   网络设备管理(注册/发送/接收)
│   ├── sock.c           #   Socket 核心
│   ├── skbuff.c         #   sk_buff(网络数据包缓冲区)
│   ├── filter.c         #   BPF 包过滤
│   └── neighbour.c      #   邻居子系统(ARP/NDP)
│
├── ipv4/                # ★ IPv4 协议栈
│   ├── tcp.c            #   TCP 协议实现
│   ├── tcp_input.c      #   TCP 接收处理
│   ├── tcp_output.c     #   TCP 发送处理
│   ├── tcp_bbr.c        #   BBR 拥塞控制(Google)
│   ├── tcp_cubic.c      #   CUBIC 拥塞控制(默认)
│   ├── udp.c            #   UDP 协议
│   ├── ip_forward.c     #   IP 转发(路由器功能)
│   ├── route.c          #   IPv4 路由
│   └── icmp.c           #   ICMP 协议(ping)
│
├── ipv6/                # IPv6 协议栈
├── netfilter/           # ★ 包过滤框架(iptables/nftables基础)
│   ├── nf_tables/       #   nftables(新一代防火墙)
│   └── ipvs/            #   IP虚拟服务器(负载均衡)
│
├── bridge/              # 网桥(二层转发,虚拟交换机)
├── wireless/            # 无线网络框架(cfg80211/mac80211)
├── bluetooth/           # 蓝牙协议栈(HCI/L2CAP/RFCOMM等)
├── sctp/                # SCTP 协议(流控制传输)
├── dccp/                # DCCP 协议(数据报拥塞控制)
├── tipc/                # TIPC(透明进程间通信,集群)
├── unix/                # Unix Domain Socket(本地IPC)
├── packet/              # AF_PACKET(原始包捕获,tcpdump基础)
├── xdp/                 # ★ XDP(eXpress Data Path,内核态高性能包处理)
├── bpf/                 # 网络 BPF 支持
├── sched/               # 流量控制(TC/QoS,令牌桶/队列规则)
├── tls/                 # 内核 TLS 加密卸载
├── mptcp/               # 多路径TCP(MPTCP)
├── can/                 # CAN 总线协议
├── nfc/                 # NFC 协议栈
├── dns_resolver/        # 内核 DNS 解析器
├── rxrpc/               # RxRPC 协议(AFS使用)
├── rose/                # ROSE 分组无线网络协议
└── 6lowpan/             # IPv6 over 低功耗无线网络(IoT)

七、block/ — 块设备层

核心作用:在文件系统和具体存储驱动之间提供统一的块设备抽象,管理 I/O 请求队列和调度。

block/
├── blk-core.c           # 块层核心(请求提交/完成流程)
├── blk-mq.c             # ★ 多队列块层(Multi-Queue,NVMe高性能基础)
├── blk-mq-sched.c       # MQ 调度器框架
├── blk-cgroup.c         # 块设备 cgroup(IO限速/优先级)
├── blk-throttle.c       # IO 限速(blkio cgroup)
├── blk-iolatency.c      # IO 延迟控制
├── blk-iocost.c         # IO 成本模型(精确IO资源控制)
├── elevator.c           # IO 调度器框架(电梯算法)
├── bfq-iosched.c        # ★ BFQ IO调度器(预算公平队列,交互式优先)
├── kyber-iosched.c      # Kyber IO调度器(低延迟,NVMe优化)
├── mq-deadline.c        # MQ-Deadline 调度器(截止时间保证)
├── blk-zoned.c          # 分区块设备支持(SMR硬盘/ZNS SSD)
├── blk-crypto.c         # 块层内联加密
├── blk-integrity.c      # 数据完整性保护(T10 DIF/DIX)
├── partitions/          # 分区表解析(MBR/GPT/各平台分区格式)
└── bio.c                # BIO(块IO请求基本单元)

八、security/ — 安全框架

核心作用:提供 LSM(Linux Security Module)钩子框架,允许多种安全策略模块共存,实现强制访问控制。

security/
├── security.c           # LSM 框架核心(在关键操作处插入安全钩子)
├── commoncap.c          # Linux Capabilities 实现
│
├── selinux/             # ★ SELinux(安全增强Linux)
│   ├── hooks.c          #   SELinux LSM钩子实现
│   ├── avc.c            #   访问向量缓存(策略决策缓存)
│   └── ss/              #   安全服务器(策略加载/查询)
│
├── apparmor/            # AppArmor(基于路径的访问控制,Ubuntu默认)
├── smack/               # SMACK(简化强制访问控制)
├── tomoyo/              # TOMOYO(基于路径的访问控制,日本开发)
├── landlock/            # ★ Landlock(用户态沙箱,无需root)
│
├── integrity/           # 文件完整性验证
│   ├── ima/             #   IMA(完整性度量架构)
│   └── evm/             #   EVM(扩展验证模块)
│
├── keys/                # 内核密钥管理(/proc/keys)
│   ├── keyring.c        #   密钥环
│   └── trusted.c        #   TPM可信密钥
│
└── bpf/                 # BPF 安全策略(LSM BPF程序)

九、init/ — 内核初始化

核心作用:内核启动的总入口,完成从 bootloader 交接到启动第一个用户进程(PID 1)的全过程。

init/
├── main.c               # ★ start_kernel():内核启动总入口
├── do_mounts.c          # 挂载根文件系统
├── do_mounts_initrd.c   # initrd 挂载支持
├── initramfs.c          # 解压 initramfs(内存中的临时根文件系统)
├── calibrate.c          # BogoMIPS 校准(CPU速度估算)
├── init_task.c          # 初始化任务(PID 0,swapper进程)
└── Kconfig              # 初始化相关配置选项

内核启动流程:

上电/复位
    ↓
BIOS/UEFI 固件
    ↓
Bootloader(GRUB/U-Boot)
    ↓
arch/x86/boot/(解压内核,进入保护模式/长模式)
    ↓
arch/x86/kernel/head_64.S(设置页表,跳转到C代码)
    ↓
init/main.c: start_kernel()
    ├── 初始化内存管理(mm_init)
    ├── 初始化调度器(sched_init)
    ├── 初始化中断(trap_init, irq_init)
    ├── 初始化时钟(time_init)
    ├── 初始化各子系统(按优先级顺序)
    └── rest_init()
            ├── 创建 kernel_init 线程(PID 1候选)
            ├── 创建 kthreadd 线程(PID 2,内核线程守护)
            └── 进入 cpu_idle(PID 0,空闲循环)
                    ↓
            kernel_init()
                ├── 挂载根文件系统
                ├── 解压 initramfs
                └── 执行 /sbin/init(systemd/SysV init)

十、include/ — 头文件

核心作用:定义内核所有子系统的数据结构、函数原型、宏定义和常量,是内核各模块间接口的规范。

include/
├── linux/               # ★ 内核通用头文件(最重要)
│   ├── sched.h          #   进程描述符(task_struct)
│   ├── mm_types.h       #   内存管理类型(page, mm_struct)
│   ├── fs.h             #   文件系统类型(inode, file, dentry)
│   ├── net/             #   网络相关(sock, sk_buff)
│   ├── list.h           #   双向链表(内核最常用数据结构)
│   ├── rbtree.h         #   红黑树
│   ├── hashtable.h      #   哈希表
│   ├── spinlock.h       #   自旋锁
│   ├── mutex.h          #   互斥锁
│   ├── atomic.h         #   原子操作
│   ├── interrupt.h      #   中断处理
│   ├── module.h         #   内核模块接口
│   ├── device.h         #   设备模型
│   ├── platform_device.h#   平台设备
│   ├── of.h             #   设备树(Open Firmware)
│   ├── dma-mapping.h    #   DMA映射
│   ├── clk.h            #   时钟框架
│   ├── regulator/       #   电源调节器
│   ├── thermal.h        #   热管理
│   ├── bpf.h            #   BPF接口
│   └── kprobes.h        #   动态探针
│
├── asm-generic/         # 架构无关的汇编级头文件(各架构可覆盖)
│
├── uapi/                # ★ 用户空间API头文件(系统调用接口)
│   ├── linux/           #   用户可见的内核接口定义
│   │   ├── if_ether.h   #     以太网协议定义
│   │   ├── bpf.h        #     BPF用户空间接口
│   │   ├── io_uring.h   #     io_uring接口
│   │   └── ...
│   └── asm-generic/     #   架构无关的用户空间汇编接口
│
├── net/                 # 网络子系统头文件
├── drm/                 # DRM图形框架头文件
├── dt-bindings/         # 设备树绑定头文件(YAML格式文档)
├── keys/                # 密钥管理头文件
├── media/               # 媒体设备头文件(V4L2/DVB)
├── rdma/                # RDMA网络头文件
├── scsi/                # SCSI子系统头文件
├── sound/               # ALSA音频头文件
├── trace/               # 追踪框架头文件
└── vdso/                # VDSO(虚拟动态共享对象)头文件

十一、crypto/ — 加密算法库

核心作用:提供内核使用的软件加密算法实现,支持硬件加速卸载。

crypto/
├── aes_generic.c        # AES 对称加密(软件实现)
├── sha256_generic.c     # SHA-256 哈希
├── sha512_generic.c     # SHA-512 哈希
├── md5.c                # MD5 哈希(兼容性)
├── rsa.c                # RSA 非对称加密
├── ecdh.c               # ECDH 密钥交换
├── chacha20poly1305.c   # ChaCha20-Poly1305(TLS 1.3)
├── gcm.c                # GCM 认证加密模式
├── cbc.c                # CBC 加密模式
├── hmac.c               # HMAC 消息认证码
├── drbg.c               # 确定性随机位生成器
├── lz4.c                # LZ4 压缩(zswap使用)
├── zstd.c               # Zstd 压缩
└── api.c                # 加密API框架(算法注册/查找)

十二、lib/ — 通用库函数

核心作用:提供内核各模块共用的基础数据结构和算法实现。

lib/
├── rbtree.c             # 红黑树(调度器/内存管理大量使用)
├── list_sort.c          # 链表排序
├── hashtable.c          # 哈希表
├── bitmap.c             # 位图操作
├── string.c             # 字符串操作(内核版本)
├── vsprintf.c           # 格式化输出(printk基础)
├── idr.c                # IDR(整数ID到指针的映射)
├── xarray.c             # XArray(可扩展数组,替代radix tree)
├── radix-tree.c         # 基数树(页缓存索引)
├── llist.c              # 无锁链表
├── kfifo.c              # 内核FIFO队列
├── crc32.c              # CRC32 校验
├── crc16.c              # CRC16 校验
├── lz4/                 # LZ4 压缩库
├── zlib_*/              # zlib 压缩库
├── xz/                  # XZ/LZMA 压缩库
├── zstd/                # Zstd 压缩库
├── test_*.c             # 各库的单元测试
└── kunit/               # KUnit 内核单元测试框架

十三、ipc/ — 进程间通信

核心作用:实现 System V IPC 和 POSIX IPC 机制。

ipc/
├── msg.c                # 消息队列(msgsnd/msgrcv)
├── sem.c                # 信号量(semop/semctl)
├── shm.c                # 共享内存(shmget/shmat)
├── mqueue.c             # POSIX 消息队列(mq_open)
├── namespace.c          # IPC 命名空间(容器隔离)
└── syscall.c            # IPC 系统调用入口

十四、io_uring/ — 高性能异步 I/O

核心作用:Linux 5.1 引入的新一代异步 I/O 框架,通过共享内存环形队列实现零系统调用的高性能 I/O。

io_uring/
├── io_uring.c           # io_uring 核心(提交/完成队列管理)
├── io-wq.c              # io_uring 工作队列
├── net.c                # 网络操作(send/recv/accept)
├── files.c              # 文件操作(read/write/fsync)
├── poll.c               # 轮询操作
├── timeout.c            # 超时操作
├── sqpoll.c             # 提交队列轮询线程(SQPOLL模式)
└── register.c           # 资源注册(固定缓冲区/文件)

十五、virt/ — 虚拟化支持

核心作用:KVM(基于内核的虚拟机)核心实现,将 Linux 内核变为 Hypervisor。

virt/
├── kvm/                 # ★ KVM 核心
│   ├── kvm_main.c       #   KVM 主框架(虚拟机创建/管理)
│   ├── mmu/             #   内存管理单元虚拟化(影子页表/EPT)
│   ├── irqchip.c        #   中断控制器虚拟化
│   └── eventfd.c        #   KVM 事件通知
└── lib/                 # 虚拟化辅助库

十六、rust/ — Rust 语言支持

核心作用:Linux 6.1 引入 Rust 作为第二内核编程语言,提供内存安全的驱动开发能力。

rust/
├── kernel/              # Rust 内核绑定库
│   ├── lib.rs           #   核心库入口
│   ├── alloc.rs         #   内存分配
│   ├── sync/            #   同步原语(Mutex/SpinLock的Rust封装)
│   ├── net/             #   网络绑定
│   └── driver.rs        #   驱动框架绑定
├── macros/              # Rust 过程宏
└── bindgen_parameters   # C头文件绑定生成参数

十七、模块间依赖关系总览

┌─────────────────────────────────────────────────────────────┐
│                      用户空间应用程序                         │
│         (glibc / 系统调用接口 / /proc /sys /dev)             │
└──────────────────────────┬──────────────────────────────────┘
                           │ 系统调用 (syscall)
┌──────────────────────────▼──────────────────────────────────┐
│                    kernel/ 核心子系统                         │
│  进程管理(fork/exit) │ 调度器(sched/) │ 信号 │ 系统调用处理   │
│  命名空间/cgroup     │ RCU/锁(locking/)│ BPF │ 审计/安全钩子  │
└──────┬───────────────┬──────────────┬──────────────┬────────┘
       │               │              │              │
┌──────▼──────┐ ┌──────▼──────┐ ┌────▼──────┐ ┌────▼────────┐
│   mm/       │ │    fs/      │ │   net/    │ │  security/  │
│  内存管理   │ │  文件系统   │ │  网络栈   │ │  安全框架   │
│ 伙伴系统    │ │  VFS层      │ │  TCP/IP   │ │  SELinux    │
│ SLUB分配器  │ │  ext4/btrfs │ │  netfilter│ │  AppArmor   │
│ 页面回收    │ │  proc/sysfs │ │  XDP/BPF  │ │  Landlock   │
└──────┬──────┘ └──────┬──────┘ └────┬──────┘ └─────────────┘
       │               │              │
┌──────▼───────────────▼──────────────▼──────────────────────┐
│                    block/ 块设备层                            │
│         blk-mq │ BFQ/Kyber/MQ-Deadline IO调度器              │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│                    drivers/ 设备驱动                          │
│  存储(NVMe/SCSI/ATA) │ 网络(eth/wifi) │ GPU │ USB │ 其他    │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│                    arch/ 体系结构层                           │
│    x86_64 │ arm64 │ riscv │ loongarch │ powerpc │ ...       │
└──────────────────────────┬──────────────────────────────────┘
                           │
                    ════════════════
                    物理硬件(CPU/内存/磁盘/网卡/GPU)

十八、关键配置与构建文件

文件/目录 作用
Makefile 顶层构建文件,驱动整个内核编译过程
Kconfig 顶层内核配置入口(menuconfig的根)
Kbuild 内核构建系统规则
scripts/ 构建辅助脚本(checkpatch代码风格检查、内核配置工具等)
.config 内核编译配置文件(由 make menuconfig 生成)
MAINTAINERS 各子系统维护者信息(超过2万条目)
CREDITS 内核贡献者名单
COPYING GPL v2 许可证
Documentation/ 内核文档(设计文档/API说明/设备树绑定)
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐