第一章:内核源码获取——从源头开始
做内核开发这么多年,我始终觉得:源码获取是基本功中的基本功。别小看这一步,很多人栽跟头就栽在这里。今天咱们就从最基础的开始,把内核源码怎么拿到手、怎么验证真伪,彻底讲清楚。
1.1 从 kernel.org 下载——最正统的方式
说到获取内核源码,kernel.org 是官方大本营。我个人习惯直接访问 https://www.kernel.org,首页上就能看到最新的稳定版、长期支持版(LTS)和开发版。
举个例子,你想下载 6.1 LTS 版本:
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.tar.xz
下载完成后,你会得到一个 .tar.xz 文件。解压命令也很简单:
tar -xf linux-6.1.tar.xz
嗯,这里要注意:tar 命令会自动识别压缩格式,不需要额外加 -J 参数。我以前刚入行时总喜欢加一堆参数,后来发现其实没必要。
curl -O 替代 wget。有些公司内网只允许 curl,我就在项目现场遇到过这种情况。
1.2 使用 Git 克隆主线仓库——开发者的首选
说实话,我现在很少直接下载压缩包了。为什么?因为 Git 克隆更方便,尤其是你要跟踪最新补丁或者做二次开发的时候。
主线内核仓库的地址是:
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
这条命令会拉取整个内核历史,大概 4-5 GB 的样子。我第一次克隆时等了快一个小时,后来学乖了:
git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
--depth=1 表示只拉取最新一次提交,体积瞬间降到 2GB 左右。你想想看,如果只是做内核裁剪和编译,根本不需要完整历史。
--depth=1 克隆,后来想切到某个旧版本做兼容性测试,发现切不回去。所以如果你需要切换版本,建议用 --depth=100 或者干脆全量克隆。
1.3 验证源码完整性——GPG 签名校验
这一步很多人会跳过,但我建议你别省。为什么?因为内核源码是攻击者的目标之一。万一你下载的源码被人动了手脚,编译出来的内核可能带后门。
验证流程其实不复杂,分三步走:
- 获取 Linus Torvalds 的公钥
- 下载签名文件
- 用 GPG 验证签名
先导入公钥:
gpg --locate-keys torvalds@kernel.org gregkh@kernel.org
然后下载签名文件(和源码包放在一起):
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.tar.sign
最后验证:
xz -cd linux-6.1.tar.xz | gpg --verify linux-6.1.tar.sign -
如果输出类似 Good signature from "Linus Torvalds <torvalds@kernel.org>",那就说明源码是原装的。
WARNING: This key is not certified with a trusted signature! 这其实是正常的,因为你的 GPG 没有把 Linus 的公钥标记为「信任」。只要指纹(fingerprint)匹配,就没问题。
我记得有一次帮客户排查问题,他们编译的内核总是莫名其妙崩溃。后来发现是下载的源码被镜像站篡改过——签名验证直接失败。从那以后,我每次下载内核都会顺手跑一遍 GPG 验证,已经成了肌肉记忆。
知识体系总览
下面这张图帮你理清本章的核心逻辑:
三种方式对比
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| kernel.org 下载 | 固定版本、生产环境 | 文件小、下载快 | 无法增量更新 |
| Git 全量克隆 | 开发、跟踪主线 | 可切换任意版本 | 占用空间大 |
| Git 浅克隆 | 快速编译、实验 | 节省带宽和磁盘 | 无法回溯历史 |
好了,第一章就到这里。源码拿到手,下一步就是配置和裁剪了。不过那是后面的事,咱们先把基础打牢。