Linux设备驱动开发与内核构建调试 - 第1节
1.1 Linux 内核版本命名规则
Linux 内核的版本号由 Linus Torvalds 及其维护团队统一管理,采用 主版本号.次版本号.补丁级别 的三段式结构。自 2.6 内核之后,版本号不再通过奇偶次版本区分稳定/开发,而是采用基于时间的语义化命名。
1.1.1 版本号格式
当前内核版本号遵循 A.B.C 格式,其中:
- A — 主版本号(Major):仅在架构或 API 发生重大不兼容变更时递增,例如 5.x → 6.x。
- B — 次版本号(Minor):每 2~3 个月发布一次,包含新特性、驱动更新和功能改进。
- C — 补丁级别(Patch):修复安全漏洞、关键 Bug,不引入新功能,通常每 1~2 周发布一次。
示例: 内核版本
6.1.25 表示主版本 6、次版本 1、第 25 个补丁。该版本属于 6.1 LTS 系列的一个稳定补丁。
1.1.2 版本号演进历史
| 时期 | 版本格式 | 说明 |
|---|---|---|
| 1.0 ~ 2.6.39 | A.B.C | 偶数为稳定版,奇数为开发版(如 2.5.x 开发 → 2.6.x 稳定) |
| 3.0 ~ 3.19 | A.B.C | 取消奇偶区分,次版本快速递增 |
| 4.0 ~ 至今 | A.B.C | 完全基于时间驱动,次版本每 2~3 个月递增 |
1.2 主线 / 稳定 / LTS 版本区别
Linux 内核社区同时维护多个分支,设备驱动开发者需要根据项目需求选择合适的内核基线。下表列出三种主要分支的核心差异:
| 分支类型 | 维护周期 | 特性更新 | 适用场景 |
|---|---|---|---|
| 主线(Mainline) | 约 2 个月 | 最新特性、新驱动、API 变更 | 开发测试、新硬件早期支持 |
| 稳定(Stable) | 约 1~2 个月 | 仅 Bug 修复和安全补丁 | 一般产品、短期项目 |
| LTS(Long Term Support) | 4~6 年 | 关键 Bug 修复、安全更新 | 嵌入式产品、工业设备、长期维护 |
驱动开发建议: 商业嵌入式产品优先选择 LTS 版本(如 5.10 LTS、6.1 LTS),可获得长期安全更新和稳定的驱动 API。主线版本适合原型验证和驱动移植评估。
1.2.1 分支关系示意图
下图展示主线、稳定、LTS 三个分支的演进与合并关系:
1.3 内核源码目录结构解析
Linux 内核源码采用模块化、层次化的目录组织方式。理解目录结构是驱动开发的基础,能够帮助开发者快速定位所需代码。以下为顶层目录结构及核心子目录说明:
1.3.1 顶层目录总览
| 目录/文件 | 功能描述 | 驱动开发者关注度 |
|---|---|---|
arch/ |
体系结构相关代码(x86、ARM、RISC-V 等) | ⭐⭐⭐⭐⭐ |
drivers/ |
设备驱动代码(字符、块、网络、I2C、SPI 等) | ⭐⭐⭐⭐⭐ |
include/ |
内核头文件(API 声明、数据结构、宏定义) | ⭐⭐⭐⭐⭐ |
kernel/ |
核心内核代码(调度、进程管理、信号、模块) | ⭐⭐⭐⭐ |
mm/ |
内存管理子系统 | ⭐⭐⭐ |
fs/ |
文件系统实现(ext4、btrfs、proc、sysfs 等) | ⭐⭐⭐ |
net/ |
网络协议栈(TCP/IP、socket、netfilter) | ⭐⭐⭐ |
Documentation/ |
内核文档、API 说明、配置指南 | ⭐⭐⭐⭐ |
scripts/ |
编译、配置、分析工具脚本 | ⭐⭐ |
tools/ |
用户空间工具(perf、selftests、objtool) | ⭐⭐ |
1.3.2 驱动开发核心目录详解
对于设备驱动开发者,以下目录需要重点掌握:
drivers/— 驱动代码主目录,按设备类型划分子目录:drivers/char/— 字符设备驱动drivers/block/— 块设备驱动drivers/net/— 网络设备驱动drivers/i2c/— I2C 总线及设备驱动drivers/spi/— SPI 总线及设备驱动drivers/gpio/— GPIO 控制器驱动drivers/platform/— 平台设备驱动(常用于嵌入式 SoC)
include/linux/— 驱动开发最常引用的头文件目录:include/linux/module.h— 模块加载/卸载宏include/linux/fs.h— 文件操作结构体file_operationsinclude/linux/cdev.h— 字符设备注册接口include/linux/platform_device.h— 平台设备驱动框架
arch/arm//arch/arm64//arch/riscv/— 嵌入式平台体系结构代码,包含:arch/arm/boot/dts/— 设备树源文件(.dts / .dtsi)arch/arm/mach-*/— 特定 SoC 平台初始化代码
1.3.3 内核源码目录结构示意图
1.3.4 驱动开发常用路径速查
快速定位指南:
- 编写字符设备驱动 →
drivers/char/+include/linux/fs.h - 编写 I2C 设备驱动 →
drivers/i2c/+include/linux/i2c.h - 编写 SPI 设备驱动 →
drivers/spi/+include/linux/spi/spi.h - 编写平台设备驱动 →
drivers/platform/+include/linux/platform_device.h - 查看设备树绑定 →
Documentation/devicetree/bindings/ - 查看内核配置选项 →
arch/arm/configs/或arch/arm64/configs/