3、内核源码获取:从kernel.org下载源码、使用git克隆主线仓库、验证源码完整性(GPG签名校验)、选择合适的稳定版本。

好,咱们开始动手了。上一章我们把开发环境搭好了,现在该去拿内核源码了。这一步看似简单,但里面坑不少。我见过太多新手直接从第三方网站下个压缩包就开始搞,结果编译到一半报错,查半天发现是源码被改过——这种事我遇到过好几次。

3.1 从哪里获取?两个主流渠道

获取内核源码,说白了就两条路:要么去 kernel.org 下载压缩包,要么用 git 克隆主线仓库。我个人更推荐后者,但前者在某些场景下也有优势。咱们都讲讲。

3.1.1 从 kernel.org 下载源码包

kernel.org 是 Linux 内核的官方发布站点。所有正式版本、RC 候选版本、稳定版本都会在这里归档。访问方式很简单:

# 直接浏览器访问
https://www.kernel.org/

# 或者用 wget 下载特定版本
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.1.tar.xz

嗯,这里要注意:下载时尽量选 .tar.xz 格式,压缩率高,传输快。我刚开始做内核开发时图省事下载 .tar.gz,结果文件大了将近一倍,下载慢不说,还占磁盘空间。

小技巧: kernel.org 页面顶部会显示最新的稳定版本和长期支持(LTS)版本。如果你不确定选哪个,直接看那个最大的数字就行——但别急着下,后面我会讲怎么选版本。

3.1.2 使用 git 克隆主线仓库

如果你打算长期做内核开发,或者想跟踪最新变化,那 git 克隆是更好的选择。Torvalds 的主线仓库在这里:

# 克隆完整仓库(包含所有历史)
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

# 或者用 HTTPS(防火墙友好)
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

你想想看,完整克隆大概要下载 3-4 GB 的数据,网速慢的话得等很久。我建议第一次用 --depth=1 参数做浅克隆,只拉取最新代码:

# 浅克隆,只取最新版本
git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

这样下载量只有几百 MB,快得多。等后面需要看历史提交时,再用 git fetch --unshallow 补全历史。

注意: 浅克隆的仓库不能直接用于提交补丁或参与主线开发。如果你打算给内核贡献代码,必须做完整克隆。

3.2 验证源码完整性:GPG 签名校验

这一步很多人会跳过,但我建议你别省。为什么?因为内核源码是攻击者的目标。如果有人篡改了源码,在里面植入后门,你编译出来的内核就是一颗定时炸弹。

我曾经在给客户做安全审计时,发现他们用的内核源码是从一个镜像站下载的,没有做任何校验。结果那个镜像站被人劫持过,源码里被插了一段挖矿代码。嗯,从那以后我再也不敢跳过校验了。

3.2.1 获取官方 GPG 公钥

首先,你需要导入 Linus Torvalds 和 Greg Kroah-Hartman 的 GPG 公钥。他们是内核发布的主要签名人。

# 从 kernel.org 获取公钥
gpg --locate-keys torvalds@kernel.org gregkh@kernel.org

# 或者从密钥服务器导入
gpg --keyserver keyserver.ubuntu.com --recv-keys 647F28654894E3BD457199BE38DBBDC86092693E

导入后,用 gpg --list-keys 确认一下:

gpg --list-keys torvalds@kernel.org

3.2.2 校验下载的源码包

每个内核发布包都附带一个 .sign 签名文件。下载源码包时,记得把签名文件也下载下来:

# 下载源码包和签名文件
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.1.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.1.tar.sign

# 解压前先校验签名
xz -cd linux-6.6.1.tar.xz | gpg --verify linux-6.6.1.tar.sign -

如果输出类似 Good signature from "Linus Torvalds...",说明源码是完整的、未被篡改的。如果看到 BAD signature,赶紧删掉重新下载。

核心要点: 校验签名不是可选项,而是必选项。尤其是从非官方镜像站下载时,这一步能救你的命。

3.2.3 校验 git 仓库的标签

如果你用的是 git 克隆,那校验方式略有不同。内核仓库的每个发布版本都有一个 GPG 签名的 tag:

# 查看所有 tag
git tag -l 'v6.*'

# 校验特定 tag 的签名
git tag -v v6.6.1

输出应该显示 gpg: Good signature from "Linus Torvalds..."。如果显示 gpg: Can't check signature: No public key,说明你没导入公钥,回去补上。

3.3 选择合适的稳定版本

好,源码拿到了,也校验过了。现在问题来了:这么多版本,我该选哪个?

我个人习惯把内核版本分成三类:

版本类型 命名示例 适用场景
主线版本(Mainline) v6.7-rc1 尝鲜、测试新功能、内核开发
稳定版本(Stable) v6.6.1 生产环境、日常使用、学习
长期支持版本(LTS) v6.1.xx 嵌入式设备、企业服务器、产品级项目

对于咱们这个课程,我建议你选 最新的稳定版本。为什么?

  • 主线版本变化太快,今天写的驱动明天可能 API 就变了
  • LTS 版本虽然稳定,但有些新特性没有,学起来不过瘾
  • 稳定版本刚刚好——功能完整,bug 较少,文档也齐全

你可以在 kernel.org 首页看到当前最新的稳定版本号。比如写这篇文章时,最新稳定版是 6.6.1。那就用它。

我的建议: 如果你是在做产品开发,选 LTS 版本。如果只是学习,选最新的稳定版就行。别在版本选择上纠结太久——先跑起来再说。

3.4 本章知识体系

下面这张图帮你理清本章的核心逻辑:

内核源码获取流程 渠道一:kernel.org 下载 渠道二:git 克隆主线 wget 下载 .tar.xz 包 git clone --depth=1 浅克隆 GPG 签名校验 .sign 文件 git tag -v 校验标签签名 版本选择 学习 → 最新稳定版 | 产品 → LTS 版

这张图把本章的脉络串起来了:两个获取渠道 → 两种下载方式 → 两种校验方法 → 最终汇聚到版本选择。你跟着这个流程走,基本不会出问题。

好,源码已经到手了。下一章咱们就把它解压出来,看看内核源码的目录结构长什么样。别急,一步步来。


专注资料整理