要让linux系统通过grub进入内核调试模式,核心是向内核传递initcall_debug、loglevel=8、earlyprintk、debug等参数:临时可在grub菜单按e编辑linux行末尾追加;永久需修改/etc/default/grub中grub_cmdline_linux并运行grub2-mkconfig或update-grub;启用blscfg的系统须用grubby工具;最后执行cat /proc/cmdline验证参数是否生效。

要让 Linux 系统通过 GRUB 进入内核调试模式,核心是向内核传递特定调试参数,并确保这些参数在启动时生效。关键不在于“一键开启调试”,而在于选择合适参数、正确写入配置、并验证是否真正加载。
添加常用内核调试参数
调试参数需加在内核命令行中,常见组合包括:
- initcall_debug:逐个打印 initcall 函数调用,用于追踪内核初始化流程卡点
- loglevel=8:启用最高级别内核日志(KERN_DEBUG),显示所有 printk 输出
- earlyprintk=vga(x86)或 earlyprintk=uart8250,io,0x3f8,115200(串口):在 console 尚未就绪前输出早期日志
- debug:启用通用内核调试功能(如 slab 调试、内存检查等)
- systemd.log_level=debug:同步提升用户空间 systemd 的日志详细度(便于排查启动服务问题)
永久配置方法(推荐)
修改 /etc/default/grub 文件,将参数写入 GRUB_CMDLINE_LINUX 或 GRUB_CMDLINE_LINUX_DEFAULT 变量中(二者区别:前者总生效,后者仅对默认菜单项生效,通常选前者更稳妥):
例如编辑后该行变为:
GRUB_CMDLINE_LINUX="initcall_debug loglevel=8 earlyprintk=vga debug systemd.log_level=debug"
保存后必须执行对应命令重生成配置:
- Debian/Ubuntu:sudo update-grub
- RHEL/CentOS/Fedora/OpenCloudOS/TencentOS:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- 若系统启用 blscfg(如新版 TencentOS Server 或 OpenCloudOS 9),需改用 grubby 工具直接修改当前内核条目:
sudo grubby --args="initcall_debug loglevel=8" --update-kernel=ALL
临时测试(无需修改文件)
开机时在 GRUB 启动菜单界面按 e 键进入编辑模式,找到以 linux 开头的行(含 vmlinuz 路径和 root=...),在行尾空格后追加调试参数(如 initcall_debug loglevel=8),再按 Ctrl+X 或 F10 启动。该设置仅本次有效,适合快速验证参数是否起作用或避免误配导致无法进系统。
确认参数已生效
系统启动后,在终端运行:
cat /proc/cmdline
输出中应完整包含你添加的参数(如 initcall_debug loglevel=8)。若无,说明配置未写入或未重生成 grub.cfg;若存在但无调试输出,可能是硬件不支持 earlyprintk,或日志被重定向,可配合 dmesg -H 或 journalctl -k -b 查看实际内核日志。











