应优先使用ubuntu-mainline-kernel-installer而非手动编译,因其自动处理下载、校验、安装、initramfs重建及GRUB更新;仅需定制patch或非标准架构时才需自行编译。

uname -r 输出的版本不是你要的,就别直接 apt upgrade —— Ubuntu LTS 默认只推送 HWE 或 GA 内核,不会自动装主线(mainline)新内核。想用 6.12、6.13 这类刚发布的版本,得手动选路径。
该用 Ubuntu Mainline Kernel Installer 还是自己编译?
绝大多数用户应该用 ubuntu-mainline-kernel-installer,它封装了下载、校验、安装、更新 initramfs 和 GRUB 的全部逻辑,比手撸 dpkg -i *.deb 少踩 80% 的坑。
只有两类人需要自己编译:
- 要打特定 patch(比如加某个驱动或改调度器)
- 目标机器架构不在 mainline 提供的
amd64/arm64范围内(如 riscv64 或定制 SoC)
编译流程本身不难,但 make menuconfig 里一不小心关掉 CONFIG_INITRAMFS_SOURCE 或漏装 linux-firmware,重启就卡在 initramfs;而 mainline installer 默认用 Ubuntu 官方构建的二进制包,签名可验、模块齐全、initrd 自动重建。
用 ubuntu-mainline-kernel-installer 安装指定版本
先确认你没装旧版(v2.x 有路径 bug),执行:
sudo apt remove ubuntu-mainline-kernel-installer curl -fsSL https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel-installer/master/install.sh | sudo bash
然后列出可用版本(含 LTS 和 rc):
ubuntu-mainline-kernel-installer -l
安装 6.13.5(举例):
sudo ubuntu-mainline-kernel-installer install 6.13.5
关键点:
- 它会自动下载
linux-image、linux-headers、linux-modules三个 deb 包(缺一不可) - 安装后自动调用
update-initramfs -u和update-grub - 新内核默认设为 GRUB 第一启动项,除非你改过
GRUB_DEFAULT
手动 dpkg 安装时最容易漏掉的依赖
如果你坚持从 https://cdn.kernel.org/ 或 https://kernel.ubuntu.com/~kernel-ppa/mainline/ 下源 deb 包,注意这三点:
-
linux-image-*.deb必须和linux-modules-*.deb版本号完全一致,否则modprobe找不到模块,dmesg里满屏Failed to load module xxx -
linux-headers-*.deb分两部分:linux-headers-X.Y.Z-*(all)和linux-headers-X.Y.Z-generic(arch-specific),缺后者,dkms编译 nvidia/virtualbox 驱动会失败 - 装完必须运行
sudo update-initramfs -u -k all,否则新内核启动时找不到 rootfs(尤其用了 LVM 或加密卷)
典型错误现象:grub 能进菜单,选新内核后黑屏几秒,直接跳回 grub —— 十有八九是 initramfs 没更新或模块缺失。
HWE 内核 vs mainline 内核:别混着用
Ubuntu LTS 用户常误以为 linux-generic-hwe-22.04 就是“最新”,其实它只是 Canonical 选型的长期支持分支(当前是 6.8.x),比主线晚 3–6 个月,但稳定性高、驱动适配全。
mainline 是上游 Linus tree 直出,每 10 周一个大版本,适合:
- 验证新硬件(比如刚发布的 Intel Arrow Lake 平台)
- 测试某项新特性(如
io_uring的 v2.3 接口或rust内核模块) - 参与内核社区反馈(遇到 panic 可直接报给 torvalds/linux)
但 mainline 不提供安全补丁(CVE 修复要等下一个稳定版),也不保证 ABI 兼容性 —— dkms 模块每次升 mainline 版本都得重编。
真正容易被忽略的是:mainline 内核不会出现在 apt list --installed | grep linux-image 的输出里,因为它们来自第三方 PPA 或手动安装,apt autoremove 不会清理它们,老内核残留多了会撑爆 /boot 分区。


















