第一章:内核源码获取——从源头开始

做内核开发这么多年,我始终觉得:源码获取是基本功中的基本功。别小看这一步,很多人栽跟头就栽在这里。今天咱们就从最基础的开始,把内核源码怎么拿到手、怎么验证真伪,彻底讲清楚。

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 签名校验

这一步很多人会跳过,但我建议你别省。为什么?因为内核源码是攻击者的目标之一。万一你下载的源码被人动了手脚,编译出来的内核可能带后门。

验证流程其实不复杂,分三步走:

  1. 获取 Linus Torvalds 的公钥
  2. 下载签名文件
  3. 用 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 克隆主线仓库 验证:GPG 签名校验 wget / curl 下载 tar 解压 .tar.xz git clone 全量/浅克隆 --depth=1 节省带宽 导入公钥 gpg --verify 验证 三种方式任选其一,但 GPG 验证是必选项

三种方式对比

方式 适用场景 优点 缺点
kernel.org 下载 固定版本、生产环境 文件小、下载快 无法增量更新
Git 全量克隆 开发、跟踪主线 可切换任意版本 占用空间大
Git 浅克隆 快速编译、实验 节省带宽和磁盘 无法回溯历史
我的建议: 如果你是初学者,直接从 kernel.org 下载一个 LTS 版本就好。等熟悉了内核裁剪和编译流程,再考虑用 Git 方式。别一上来就搞全量克隆,那玩意儿真挺占地方的。

好了,第一章就到这里。源码拿到手,下一步就是配置和裁剪了。不过那是后面的事,咱们先把基础打牢。


专注资料整理