Linux 6.19.10 内核代码树及模块功能详解(纯代码文件解释)
顶层目录结构
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说明/设备树绑定) |
更多推荐




所有评论(0)