前言在b站上刷到 Linux 内核在2024年增加了一个有趣的功能:DRM Panic。当内核发生Kernel Panic时, 会出现一个类似于windows的蓝屏界面(划掉, 紫屏。我在物理机上尝试了最终还是没看到二维码, 搞半天原来要重新编译内核(晕
于是,我开启了一段长达数小时的调试之旅。本文将完整记录整个过程——从触发内核恐慌、解决各种卡死问题,到最终发现“二维码缺失”的根本原因。希望能给同样好奇的朋友一些参考。
我的设备:
- RedmiBook 14 II,
- CPU Intel i7-1065G7(Ice Lake)
- 双显卡 Intel + NVIDIA MX350
- 系统 Linux Mint 22.2 Zara
- 内核 6.14.0-29-generic
一、初次尝试:直接触发,只有卡死
按照网上的教程,最简单触发内核恐慌的命令是:
echo c | sudo tee /proc/sysrq-trigger结果屏幕直接卡死在最后一帧,没有任何新画面,键盘无响应,只能长按电源键强制重启。查看日志确认内核确实 panic 了,但画面没出来。
原因分析
· 默认内核启动参数中有 quiet splash,隐藏了大部分输出。 · 图形界面(Cinnamon)的 Xorg 服务器持有 DRM master 锁,内核恐慌时无法抢占显示输出。
二、初现曙光:切换到 tty 文本控制台
我尝试按 Ctrl+Alt+F3 切换到纯文本 tty,登录后再次触发崩溃。这次屏幕上终于出现了黑底白字的内核恐慌调用栈——但依然没有企鹅和二维码。
这说明:传统文本模式可以工作,但 DRM Panic 的图形界面没有激活。
检查内核配置
grep -E "CONFIG_DRM_PANIC" /boot/config-$(uname -r)输出显示:
CONFIG_DRM_PANIC=yCONFIG_DRM_PANIC_FOREGROUND_COLOR=0xffffffCONFIG_DRM_PANIC_BACKGROUND_COLOR=0x5e2750CONFIG_DRM_PANIC_SCREEN="user"# CONFIG_DRM_PANIC_SCREEN_QR_CODE is not set好消息:内核已编译 DRM_PANIC 支持。坏消息:当前模式是 user(只显示文本),二维码功能被禁用。
三、尝试强制启用图形化 Panic
1. 修改 GRUB 内核参数
编辑 /etc/default/grub,添加:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash drm.panic=1 drm.panic_force=1 vt.handoff=0"运行 sudo update-grub 并重启。检查 /proc/cmdline 确认参数已生效。
2. 问题依旧:图形界面下仍然卡死
即使在桌面环境直接触发,依然卡在最后一帧。于是我尝试禁用 NVIDIA 显卡(使用 prime-select intel 并黑名单 nvidia 模块),结果依旧。
3. 添加 nomodeset 后“成功”了?
在 GRUB 参数中加入 nomodeset(禁用内核模式设置)后,触发崩溃时终于出现了紫色的文本 panic 界面,顶部有 ASCII 企鹅字符!但是——没有二维码。
这正是文章开头那张截图的效果。
四、定位二维码缺失的真相
检查运行时控制接口
cat /sys/module/drm/parameters/panic_screen# 输出:user尝试在线切换为二维码模式:
echo -n qr_code | sudo tee /sys/module/drm/parameters/panic_screen# 报错:Invalid argument这说明内核根本不认识 qr_code 这个值。
终极检查:内核编译选项
grep "CONFIG_DRM_PANIC_SCREEN" /boot/config-$(uname -r)输出:
CONFIG_DRM_PANIC_SCREEN="user"# CONFIG_DRM_PANIC_SCREEN_QR_CODE is not set真相大白:我的 Linux Mint 内核在编译时只开启了文本模式,二维码功能对应的 CONFIG_DRM_PANIC_SCREEN_QR_CODE 被明确关闭了。因此无论怎么配置,都不可能显示二维码。
五、为什么会这样?发行版内核策略
· 二维码功能依赖 Rust 编写的底层库,编译时需要完整的 Rust 工具链。 · Ubuntu/Debian 系(包括 Mint)为了稳定和减少依赖,默认不开启该选项。 · 而 Arch Linux、Fedora 等激进发行版则默认启用了二维码。
六、硬件兼容性问题补充
在排查过程中,我发现即使不加 nomodeset,DRM Panic 也无法在图形界面下正常工作。查阅内核邮件列表发现,该功能的开发者 Jocelyn Falempe 曾报告:
“I still have an issue with Alderlake, and it doesn’t work when in gnome desktop.”
我的 Ice Lake 平台与 Alderlake 架构相近,同样受到影响。这说明除了内核配置,部分 Intel 显卡在图形界面下的抢占问题也是未解决的 bug。
七、最终结论与建议
1. 为什么我没看到二维码?
- 直接原因:当前内核编译时未启用 CONFIG_DRM_PANIC_SCREEN_QR_CODE。
- 根本原因:Linux Mint 发行版内核策略保守,未包含该功能。
2. 为什么连紫色企鹅界面都看不到(不加 nomodeset)?
- 硬件/驱动兼容性问题,Intel Ice Lake + i915 驱动在图形界面下无法被 DRM Panic 抢占。
3. 如何完整体验 DRM Panic?
- 最简单:使用虚拟机安装 Fedora 40+ 或 Arch Linux,直接触发。
- 物理机:要么更换发行版,要么自己重新编译内核(开启 CONFIG_DRM_PANIC_SCREEN_QR_CODE=y),并接受可能存在的抢占问题。
4. 给同样折腾的朋友的建议
- 先检查
/proc/cmdline确认参数生效。 - 用
lsmod | grep nvidia排除双显卡干扰。 - 查看内核 config 确认 CONFIG_DRM_PANIC_SCREEN_QR_CODE 是否开启。
- 如果只是为了截图,虚拟机是最省心的途径。
八、彩蛋:开发者自己的话
“我仍然在 Alderlake 平台上遇到问题,在 GNOME 桌面下它无法工作。” —— Jocelyn Falempe
连功能开发者都在某些 Intel 笔记本上搞不定,我的 RedmiBook 失败也就不那么意外了。这证明问题不是我的配置错误,而是功能本身在部分硬件上尚不完善。
为什么说Rust是编程界的原神.jpg
后记
虽然最终没有在物理机上看到完整的二维码,但整个调试过程让我对 Linux 内核参数、DRM 子系统、GRUB 配置以及内核编译选项有了更深的理解。而且,至少我成功看到了那只紫色的 ASCII 企鹅——也算是不虚此行。
