内核 - Arch Linux 中文维基

跳转到内容

# 内核

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Kernel，最近一次同步于 2026-05-01，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- 内核模块
- 编译内核模块
- sysctl

根据维基百科：

  Linux 内核是一个开源的、类 Unix 的、操作系统宏内核。

Arch Linux 基于 Linux 内核。除了最新的稳定内核之外，还有许多各种各样的 Linux 内核可供选择。本文列出了仓库中提供的一些选择，并对它们简要介绍。本文还介绍了一些可用的内核补丁。文章的最后总览了自行编译内核的方法，并包含各种方法的链接。

内核包安装在 `/usr/lib/modules/` 路径下，用于生成 `/boot/` 目录中的 vmlinuz 可执行镜像[1]。安装新的内核包后，需重新配置引导加载程序以适配变更。若需降级内核，请参阅降级软件包#降级内核。

## 官方支持的内核

官方支持的内核可通过论坛和漏洞报告获取社区支持。

- Stable — 采用了一些补丁的原版 Linux 内核和模块。

  https://www.kernel.org/ || linux包

- Hardened — 注重安全的 Linux 内核，采用一系列加固补丁以缓解内核和用户空间漏洞。和 linux包 相比，它启用了上游更多的内核加固功能。

  https://github.com/anthraxx/linux-hardened || linux-hardened包

- Longterm — 长期支持（LTS）的 Linux 内核及模块，提供针对服务器使用场景优化的配置选项。

  https://www.kernel.org/ || linux-lts包

- Realtime kernel（英语：Realtime kernel） — 由 Ingo Molnar 领导的核心开发者小组维护。该补丁使内核的几乎所有部分可被抢占（除少量“raw_spinlock critical regions”（“原始自旋锁关键区域”）代码段外），通过将大多数内核自旋锁替换为支持优先级继承的互斥锁，并将所有硬件中断和软件中断迁移至内核线程处理实现。

  https://wiki.linuxfoundation.org/realtime/start || linux-rt包、linux-rt-lts包
  注意：实时内核支持已并入 Linux 6.12

- Zen Kernel — 一些内核黑客合作的结果，致力于提供最适合日常使用的内核。详细信息请参阅常见问题解答和详细特性列表。

  https://github.com/zen-kernel/zen-kernel || linux-zen包

## 编译

可通过以下方式编译内核：

/Arch 构建系统
  利用已有的高质量的 `linux` PKGBUILD 且可受益于包管理系统。
/传统编译
  需要手动下载内核源代码包，并以普通用户身份在自己的主目录中进行编译。

警告：

- 使用自定义内核可能会引起各种稳定性和可靠性问题，包括数据丢失。强烈建议操作前进行备份。
- Arch Linux 仅对 #官方支持的内核提供官方支持。若使用非官方支持的内核，务必在请求支持时提及。

提示：

- 提高系统速度的最佳方法是先根据架构和处理器类型定制内核配置。
- 可以通过移除不使用的功能模块来减小内核体积（从而缩短编译时间）。例如禁用蓝牙、video4linux、千兆以太网等支持。

Arch 内核包的 `config` 文件位于 Arch 软件包的源文件中（例如 linux包 链接到的 [2]）。如果启用了 `CONFIG_IKCONFIG_PROC` 内核选项，当前运行的内核的 `config` 文件也可通过 `/proc/config.gz` 路径获取。

部分列出的软件包也可通过非官方用户仓库获取预编译版本。

### kernel.org 内核

- Git — 使用 Linus Torvalds Git 仓库源码构建的 Linux 内核及模块。

  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git || linux-gitAUR

- Mainline — 每 2～3 个月发布一次的引入所有新功能的内核。

  https://www.kernel.org/ || linux-mainlineAUR

- Next — 包含待合并至下个 Mainline 版本的功能的前沿内核。

  https://www.kernel.org/doc/man-pages/linux-next.html || linux-next-gitAUR

- DRM — 包含前沿 GPU 驱动程序的 Linux 内核。

  https://gitlab.freedesktop.org/drm || linux-drm-tip-gitAUR、linux-drm-next-gitAUR

- Longterm — 长期支持（LTS）的 Linux 内核和模块。

  https://www.kernel.org/ || linux-lts612AUR、linux-lts66AUR、linux-lts61AUR、linux-lts515AUR、linux-lts510AUR

### 非官方内核

- linux-lily — 本站站长 Lilydjwg 使用的内核，包含 cjktty、Android binder 和默认 BBR。这是一个较少更新的内核包，可以通过添加 archlinuxcn 仓库来安装。

  https://github.com/archlinuxcn/repo/tree/master/archlinuxcn/linux-lily || linux-lilyCNRepo

- Libre — 移除了所有专有或被混淆的设备驱动的纯净内核。

  https://www.fsfla.org/ikiwiki/selibre/linux-libre/ || linux-libreAUR

- Liquorix — 基于 Zen 内核源码并使用 Debian 配置方案构建的替代内核，专为桌面、多媒体和游戏场景优化，常用作 Debian 性能增强内核。维护者 Damentz 同时也是 Zen 补丁集的开发者。

  https://liquorix.net || linux-lqxAUR

- pf-kernel — 包含多项未合并入主线的前沿特性，由内核工程师维护。若补丁未正式移植到新版内核，项目将提供支持。当前主要特性包含 UKSM、DDCCI、v4l2loopback 和 BBRv3。

  https://pfkernel.natalenko.name || 软件包：
  - 通过 post-factum kernels 仓库获取或使用 linux-pfAUR（由开发者 post-factum 维护）

- Project C — 包含 Alfred Chen 的 Project C 补丁集（含 BMQ 和 PDS 调度器）。

  https://gitlab.com/alfredchen/projectc || linux-prjcAUR

- Nitrous — 针对 Skylake 及更新架构优化的修改版内核。

  https://gitlab.com/xdevs23/linux-nitrous || linux-nitrousAUR

- Tachyon — Intel Clear Linux 项目的补丁，由于 Clear Linux 项目已被放弃，现已交接给新项目。提供性能和安全优化。

  https://git.staropensource.de/StarOpenSource/Linux-Tachyon || linux-tachyonAUR

- tkg — 高度可定制的内核构建系统，提供多项性能优化补丁和调校选项（含 CFS、Project C PDS/BMQ、MuQSS 和 CacULE 调度器），由 Etienne Juvigny 维护。

  https://github.com/Frogging-Family/linux-tkg || 通过 chaotic-aur 获取

- VFIO — 包含 Alex Williamson 开发的补丁（acs override 和 i915），用于在特定设备上实现 KVM PCI 直通功能。

  https://lwn.net/Articles/499240/ || linux-vfioAUR、linux-vfio-ltsAUR

- XanMod — 专为高性能工作站、游戏主机和媒体中心优化，采用 BFQ I/O 调度器、TCP BBRv3 拥塞控制、x86_64 高级指令集支持和部分 Clear Linux 补丁集。

  https://xanmod.org/ || linux-xanmodAUR、linux-xanmod-ltsAUR、linux-xanmod-rtAUR、linux-xanmod-boreAUR

- linux-cachyos — 由 CachyOS 开发的 SCHED-EXT + BORE + Cachy Sauce 增强内核，包含多项优化补丁。

  https://github.com/CachyOS/linux-cachyos || linux-cachyosAUR

这里的许多非官方内核都包含需要手动启用的功能，请阅读补丁内附带的文档（其中许多已经包含了对内核源码的 `Documentation/` 目录的更改）或在网络上搜索补丁名称。

## 疑难解答

### 内核 panic

当 Linux 内核进入不可恢复的故障状态时，会触发内核 panic（kernel panic）。该状态通常由存在缺陷的硬件驱动引发，导致系统死锁、无响应并需强制重启。在死锁发生前，内核会生成诊断信息，包含以下内容：故障发生时的机器状态（machine state）、指向识别故障的内核函数的调用轨迹（call trace），以及当前已加载的模块列表。值得庆幸的是，使用主线版本内核（例如官方仓库所提供的）时，内核 panic 概率较低。但仍需掌握遭遇此情况时的应对方法。

注意：内核 panic 有时也被称作 oops 或内核 oops（kernel oops）。尽管 panic 和 oops 均由故障状态引发，但 oops 的范畴更广——其不一定导致系统死锁：某些情况下内核可通过终止问题进程继续运行。
提示：通过以下方式之一可将可恢复的 oops 强制转为 panic：

- 启动时添加内核参数 `oops=panic`
- 向 `/proc/sys/kernel/panic_on_oops` 写入 `1`

此设置适用于需严格排查因 oops 恢复可能导致的隐蔽性系统不稳定的场景。

#### 检查 panic 信息

若内核 panic 发生在启动流程早期，控制台可能显示含“Kernel panic - not syncing:”的提示信息，而一旦 Systemd 开始运行，内核消息应被捕获并写入系统日志。然而，由于 panic 发生时系统会在 `system-journald` 记录前即死锁，故内核输出的诊断信息几乎从不写入磁盘日志。

##### 蓝屏二维码

自 linux包 6.10（引入了 `drm_panic`）起，内核默认会以蓝屏二维码的形式显示 panic，可通过二维码提供的 URL 查看堆栈回溯。对于 Arch Linux，其是指向 https://panic.archlinux.org/panic_report 的链接。该 URL 包含多种信息以及经 gzip 压缩并编码在 URL 片段中的堆栈回溯，这些数据不会被发送到服务器（仅在客户端处理）。

可在这篇论坛帖子查看附有链接和截图的 panic 示例。

欲回到旧方式，请向 `drm` 内核模块传递 `panic_screen=kmsg` 参数（或直接传递 `drm.panic_screen=kmsg` 内核参数）以在控制台显示堆栈回溯。

##### C控制台

在触发时通过控制台实时观察以查看 panic 信息（不配置 kdump crashkernel 的情况下）的旧方式依旧可行。可通过以下内核参数启动系统，并尝试在 tty1 复现 panic：

    systemd.journald.forward_to_console=1 console=tty1

提示：若 panic 信息滚动过快难以查看，可尝试添加内核参数 `pause_on_oops=seconds`（seconds 为暂停秒数）来冻结屏幕输出。

##### 示例：问题模块分析

通过诊断信息可推测引发 panic 的子系统或模块。本例展示某虚拟设备启动时发生的 panic，请关注粗体标记的关键行：

    kernel: BUG: unable to handle kernel NULL pointer dereference at (null) 1
    kernel: IP: fw_core_init+0x18/0x1000 [firewire_core] 2
    kernel: PGD 718d00067
    kernel: P4D 718d00067
    kernel: PUD 7b3611067
    kernel: PMD 0
    kernel:
    kernel: Oops: 0002 [#1] PREEMPT SMP
    kernel: Modules linked in: firewire_core(+) crc_itu_t cfg80211 rfkill ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG nf_conntrack_ipv4 ... 3
    kernel: CPU: 6 PID: 1438 Comm: modprobe Tainted: P           O    4.13.3-1-ARCH #1
    kernel: Hardware name: Gigabyte Technology Co., Ltd. H97-D3H/H97-D3H-CF, BIOS F5 06/26/2014
    kernel: task: ffff9c667abd9e00 task.stack: ffffb53b8db34000
    kernel: RIP: 0010:fw_core_init+0x18/0x1000 [firewire_core]
    kernel: RSP: 0018:ffffb53b8db37c68 EFLAGS: 00010246
    kernel: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
    kernel: RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffffc16d3af4
    kernel: RBP: ffffb53b8db37c70 R08: 0000000000000000 R09: ffffffffae113e95
    kernel: R10: ffffe93edfdb9680 R11: 0000000000000000 R12: ffffffffc16d9000
    kernel: R13: ffff9c6729bf8f60 R14: ffffffffc16d5710 R15: ffff9c6736e55840
    kernel: FS:  00007f301fc80b80(0000) GS:ffff9c675dd80000(0000) knlGS:0000000000000000
    kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    kernel: CR2: 0000000000000000 CR3: 00000007c6456000 CR4: 00000000001406e0
    kernel: Call Trace:
    kernel:  do_one_initcall+0x50/0x190 4
    kernel:  ? do_init_module+0x27/0x1f2
    kernel:  do_init_module+0x5f/0x1f2
    kernel:  load_module+0x23f3/0x2be0
    kernel:  SYSC_init_module+0x16b/0x1a0
    kernel:  ? SYSC_init_module+0x16b/0x1a0
    kernel:  SyS_init_module+0xe/0x10
    kernel:  entry_SYSCALL_64_fastpath+0x1a/0xa5
    kernel: RIP: 0033:0x7f301f3a2a0a
    kernel: RSP: 002b:00007ffcabbd1998 EFLAGS: 00000246 ORIG_RAX: 00000000000000af
    kernel: RAX: ffffffffffffffda RBX: 0000000000c85a48 RCX: 00007f301f3a2a0a
    kernel: RDX: 000000000041aada RSI: 000000000001a738 RDI: 00007f301e7eb010
    kernel: RBP: 0000000000c8a520 R08: 0000000000000001 R09: 0000000000000085
    kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000c79208
    kernel: R13: 0000000000c8b4d8 R14: 00007f301e7fffff R15: 0000000000000030
    kernel: Code: <c7> 04 25 00 00 00 00 01 00 00 00 bb f4 ff ff ff e8 73 43 9c ec 48
    kernel: RIP: fw_core_init+0x18/0x1000 [firewire_core] RSP: ffffb53b8db37c68
    kernel: CR2: 0000000000000000
    kernel: ---[ end trace 71f4306ea1238f17 ]---
    kernel: Kernel panic - not syncing: Fatal exception 5
    kernel: Kernel Offset: 0x80000000 from 0xffffffff810000000 (relocation range: 0xffffffff800000000-0xfffffffffbffffffff
    kernel: ---[ end Kernel panic - not syncing: Fatal exception

1. 指出引发 panic 的错误类型，本例为程序缺陷
2. 显示 panic 发生在 `firewire_core` 模块的 `fw_core_init` 函数
3. 显示最近加载的模块是 `firewire_core`
4. 显示调用 `fw_core_init` 的上层函数是 `do_one_initcall`
5. 确认该 oops 实际已成为 panic，系统进入死锁

由此可推断 panic 发生于 `firewire_core` 模块加载时的初始化例程（可能是该版本 FireWire 驱动存在程序错误，导致与硬件不兼容）。临时解决方案是阻止该模块加载：

- 若模块在 initramfs 阶段加载：使用内核参数 `rd.blacklist=firewire_core` 重启
- 其他情况：使用内核参数 `module_blacklist=firewire_core` 重启

### 调试回归问题

参见常规故障排除#处理软件倒退问题。

可尝试安装 linux-mainlineAUR 以确认问题是否已在上游修复。软件包评论区置顶说明中提及的预编译内核仓库可避免耗时的手动编译。

若问题非近期出现，建议测试 Arch Linux Archive 中的旧版 LTS 内核（linux-lts包）。

若问题仍存，请对 linux-gitAUR 内核进行二分排查（英语：bisect）（bisect），并按内核项目回归问题报告流程提交错误报告。具体报告途径需根据 `MAINTAINERS` 文件中标注的 Bugtracker（`B:` 条目）选择：子系统邮件列表、Kernel Bugzilla 或 DRM Gitlab 等平台。测试时需确保使用未打补丁的“原版”内核以排除第三方修改影响。若确认补丁引发问题，请直接联系补丁作者。

注意：由于需要多次编译不同版本内核，内核二分排查可能耗时较长。

#### 精简内核构建

通过以下方式可显著缩短内核编译时间：

- 使用 modprobed-db（英语：modprobed-db） 工具仅编译本地系统所需的模块
- 运行 `make localmodconfig` 自动生成最小化配置

调试特定子系统时（如网络问题），可完全移除无关驱动（例如声卡驱动）以进一步精简配置。

## 参见

- O'Reilly - Linux Kernel in a Nutshell（免费电子书）
- What Stable Kernel Should I Use?（Greg Kroah-Hartman 撰文）
- Linux 内核官方文档

分类：​

- 内核
- 软件列表

内核
添加话题