3. Linux 内核源码获取:从 kernel.org 下载源码、使用 git 克隆主线内核、查看内核版本与分支
嵌入式驱动开发的第一步是获取正确版本的内核源码。源码获取方式直接影响后续编译环境的可复现性与调试效率。本节覆盖三种主流获取路径:直接下载压缩包、Git 克隆主线仓库以及版本与分支的确认方法。
3.1 内核源码获取方式对比
根据开发场景(快速验证、长期维护、主线跟踪)选择不同的获取方式。下表列出三种方式的适用场景与关键差异:
| 获取方式 | 命令/URL 示例 | 适用场景 | 磁盘占用 | 版本切换成本 |
|---|---|---|---|---|
| kernel.org 压缩包 | wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz |
快速构建、嵌入式 SDK 固化 | ~1.5 GB(解压后) | 低(重新下载) |
| Git 克隆主线 | git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git |
主线跟踪、补丁开发、长期维护 | ~4.5 GB(含完整历史) | 高(git checkout) |
| Git 浅克隆 | git clone --depth=1 --branch v6.6 ... |
CI/CD、嵌入式构建服务器 | ~1.8 GB(仅最新快照) | 中(需重新克隆) |
建议:嵌入式产品开发推荐使用 Git 浅克隆 + 指定标签,既保留版本追溯能力,又大幅减少磁盘占用与克隆时间。
3.2 从 kernel.org 下载稳定版源码
kernel.org 是 Linux 内核官方发布站点,提供 tar.xz 格式的压缩包。适用于不需要 Git 历史、仅需编译内核的场景。
# 下载 Linux 6.6 LTS 稳定版
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz
# 解压
tar -xf linux-6.6.tar.xz
# 进入源码目录
cd linux-6.6
注意:kernel.org 镜像站可能因地域不同而速度差异较大。建议使用 cdn.kernel.org 或国内镜像(如清华 TUNA、中科大 USTC)加速下载。
3.3 使用 Git 克隆主线内核
Git 方式适合需要跟踪最新主线、提交补丁或长期维护多个版本的开发场景。主线仓库由 Linus Torvalds 维护,所有正式发布版本均以 tag 形式存在。
# 完整克隆主线内核(包含全部历史)
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
# 进入仓库
cd linux
# 查看所有本地分支
git branch -a
# 查看所有可用标签(版本号)
git tag | head -20
若磁盘空间有限,可使用 浅克隆 仅获取指定版本:
# 浅克隆 v6.6 分支,深度为 1(仅最新提交)
git clone --depth=1 --branch v6.6 \
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git \
linux-6.6-shallow
3.4 查看内核版本与分支
获取源码后,必须确认当前所处的版本与分支,避免编译时使用错误的配置。以下为常用检查命令:
| 命令 | 输出示例 | 说明 |
|---|---|---|
make kernelversion |
6.6.0 |
从顶层 Makefile 提取版本号 |
git describe --tags |
v6.6-rc1-123-gabcdef |
基于最近 tag 的描述(Git 仓库内) |
git branch --show-current |
master 或 v6.6 |
显示当前 Git 分支名 |
cat include/generated/utsrelease.h |
6.6.0 |
编译后生成的版本宏 |
关键点:嵌入式驱动模块必须与目标内核版本完全一致。使用
uname -r 查看目标设备运行的内核版本,然后通过 git checkout 切换到对应 tag。
3.5 内核源码获取与版本确认流程
下图展示从选择获取方式到确认版本的完整决策与操作流程:
3.6 常见问题与避坑指南
- 版本不匹配:驱动模块编译时的内核版本必须与目标设备运行版本完全一致,包括
EXTRAVERSION后缀(如6.6.0-custom)。 - Git 浅克隆限制:浅克隆无法使用
git describe获取完整版本描述,且无法切换历史版本。若需长期维护,建议完整克隆。 - 镜像站选择:国内用户优先使用
mirrors.tuna.tsinghua.edu.cn或mirrors.ustc.edu.cn的 kernel.org 镜像,速度提升 5~10 倍。 - 磁盘空间:完整克隆后建议执行
git gc --aggressive压缩对象存储,可减少约 30% 磁盘占用。
生产环境最佳实践:在嵌入式构建服务器上,使用
git clone --depth=1 --branch <tag> 获取指定版本,配合 git archive 导出干净源码树,避免 .git 目录带入目标文件系统。