Linux内核源码结构精讲:核心目录功能与嵌入式适配逻辑

发布时间:2026/7/20 20:13:05
Linux内核源码结构精讲:核心目录功能与嵌入式适配逻辑 Linux内核源码结构精讲核心目录功能与嵌入式适配逻辑作者黒漂技术佬 | 系列Linux内核配置与移植引言很多嵌入式新手拿到Linux内核源码包比如linux-5.10.xxx.tar.xz后解压一看密密麻麻几千个文件瞬间心跳加速、头皮发麻。别慌内核源码虽然庞大但它的目录结构是有规律可循的。本文带你逐个劈开内核源码的核心目录搞清楚每个目录是干什么的以及做嵌入式开发时需要重点关注哪几个。一、内核源码顶层目录总览解压一份标准的Linux内核源码以5.10版本为例你会看到以下顶层目录linux-5.10/ ├── arch/ # 架构相关代码ARM、x86、RISC-V等 ├── block/ # 块设备I/O层 ├── certs/ # 证书相关 ├── crypto/ # 加密算法 ├── Documentation/ # 内核文档 ├── drivers/ # 设备驱动最大的目录 ├── fs/ # 文件系统VFS、ext4、FAT等 ├── include/ # 头文件 ├── init/ # 内核初始化 ├── ipc/ # 进程间通信 ├── kernel/ # 内核核心调度、信号等 ├── lib/ # 通用库函数 ├── mm/ # 内存管理 ├── net/ # 网络协议栈 ├── scripts/ # 编译辅助脚本 ├── security/ # 安全模块SELinux等 ├── sound/ # 音频子系统 ├── tools/ # 用户态工具 ├── usr/ # initramfs相关 ├── virt/ # 虚拟化 ├── Kconfig # 顶层配置入口 ├── Makefile # 顶层编译入口 └── COPYING # 许可证嵌入式开发者必盯的目录arch/、drivers/、include/、scripts/、Documentation/devicetree/。二、核心目录逐一剖析2.1arch/—— 芯片架构的户口本这是嵌入式工程师打交道最频繁的目录。内核需要知道它在什么CPU上跑arch/下面按架构分子目录arch/ ├── arm/ # ARM 32位 │ ├── boot/dts/ # ★ 设备树文件存放处 │ ├── mach-xxx/ # 各SoC厂商的板级支持 │ ├── configs/ # 默认配置文件 │ └── kernel/ # ARM特有的内核代码 ├── arm64/ # ARM 64位 ├── x86/ # PC平台 ├── riscv/ # RISC-V架构 └── mips/ # MIPS架构如果你是做ARM嵌入式开发arch/arm/boot/dts/是修改设备树Device Tree的主战场arch/arm/configs/里放着xxx_defconfig默认配置文件编译前需要从这里拷贝一份。2.2drivers/—— 驱动的百货商场这是内核中体积最庞大的目录几乎所有的设备驱动都在这里一级子目录按设备类型分类子目录功能说明嵌入式常用度drivers/gpio/GPIO控制器与引脚驱动⭐⭐⭐⭐⭐drivers/i2c/I2C总线与设备驱动⭐⭐⭐⭐⭐drivers/spi/SPI总线与设备驱动⭐⭐⭐⭐drivers/net/网络设备驱动含ethernet、wifi⭐⭐⭐⭐drivers/usb/USB主机/设备驱动⭐⭐⭐drivers/mtd/存储技术设备NAND/NOR Flash⭐⭐⭐⭐drivers/tty/serial/串口驱动⭐⭐⭐⭐⭐drivers/video/显示驱动framebuffer等⭐⭐⭐drivers/input/输入设备按键、触控⭐⭐⭐drivers/pwm/PWM驱动⭐⭐⭐drivers/clk/时钟驱动框架⭐⭐⭐⭐⭐嵌入式适配的核心原则你不需要修改所有驱动只关注和你板子外设对应的那几个。2.3include/—— 头文件的图书馆include/存放了内核中几乎所有模块的头文件。嵌入式开发中需要重点关注include/linux/—— 内核通用宏和框架接口include/uapi/—— 用户空间API头文件导出给应用程序用include/dt-bindings/—— 设备树绑定头文件DTS中引用的宏定义在此当你写设备树时类似dt-bindings/gpio/gpio.h的引用它的物理位置就在include/dt-bindings/gpio/gpio.h。2.4scripts/—— 编译的工具箱这个目录不运行在内核里而是用来编译内核的工具集scripts/kconfig/—— 负责解析 Kconfig 文件生成.configscripts/Makefile.build—— 编译的核心Makefile规则scripts/dtc/—— 设备树编译器DTC源码scripts/extract-ikconfig—— 从内核镜像中提取配置三、嵌入式适配的关键目录做嵌入式Linux移植你的日常工作几乎就在这几个目录里打转arch/arm/boot/dts/ → 编写/修改设备树 arch/arm/configs/ → 查找/生成默认配置 drivers/xxx/ → 添加或修改驱动 include/dt-bindings/ → 引用设备树宏定义 Makefile / Kconfig → 配置编译选项典型工作流从arch/arm/configs/找一个接近的defconfig做基础配置在arch/arm/boot/dts/下创建自己板子的.dts设备树文件如果外设驱动不在内核主线里在drivers/下添加驱动代码修改对应目录的Kconfig和Makefile让新驱动参与编译四、新手常见困惑解答问内核源码为什么这么大我需要全部看懂吗答Linux内核5.10大约有近3000万行代码没有人能全部看懂——Linus本人也不行。嵌入式工程师只需要理解架构层arch/、驱动层drivers/以及与硬件相关的头文件就够了。其他如内存管理mm/、进程调度kernel/、文件系统fs/理解原理即可不需要逐行读懂。问我该下载哪个版本的内核答建议选择LTS长期支持版本比如 5.4、5.10、5.15、6.1、6.6 等。芯片原厂如NXP、ST、Rockchip通常基于LTS版本提供BSP。总结Linux内核源码虽然庞大但掌握了顶层目录的功能划分后它就不再是迷宫了。嵌入式开发者的核心工作区就是设备树DTS、驱动代码、配置文件三个板块分别对应arch/arm/boot/dts/、drivers/、arch/arm/configs/。后续文章将带你逐一攻克这些环节。