必须先通过grub参数启用内核调试模式,再配置kdump服务并提升printk日志级别,依次完成debug/earlyprintk参数添加、crashkernel内存预留、kdump服务启用及debugfs模块加载,方可完整支持vmcore捕获与kgdb调试。

您在麒麟OS上需要定位内核级崩溃、驱动异常或系统挂起问题,必须先开启内核调试功能支持,否则dmesg仅显示有限信息,kdump无法捕获vmcore,kgdb也无法建立调试连接。
通过GRUB启动参数启用内核调试模式
该方式在系统启动早期即激活内核调试能力,适用于所有场景,包括图形界面崩溃后仅剩TTY可用的情况。它不依赖桌面环境,是开启调试支持最基础且不可绕过的一步。
1、重启系统,在GRUB引导菜单出现时按Shift键(UEFI模式下尝试Esc)进入编辑界面;
2、用方向键选中当前默认启动项,按e进入临时编辑模式;
3、找到以linux开头的行,在该行末尾空格后追加以下参数:【debug earlyprintk=vga loglevel=8 ignore_loglevel】;
4、按Ctrl+X或F10启动临时配置的内核——此时屏幕将滚动大量内核初始化日志,说明调试输出已生效;
5、若需永久生效,编辑/etc/default/grub文件,在GRUB_CMDLINE_LINUX行末添加相同参数,再执行sudo update-grub && sudo reboot。
启用kdump服务捕获内核崩溃转储
仅开启调试日志还不够,当系统发生oops或panic时,必须有机制保存内存快照供后续分析。kdump是麒麟OS官方支持的内核崩溃转储方案,依赖预留内存和专用捕获内核。
方法一:使用图形化工具一键启用
1、打开“控制中心”→【系统管理】→【内核调试】;
2、点击【kdump配置】标签页,勾选“启用kdump服务”;
3、设置预留内存大小为512MB(x86_64平台最低要求),点击应用;
4、系统自动执行sudo systemctl enable kdump && sudo systemctl start kdump;
5、验证状态:sudo kdumpctl status,返回active (exited)即表示就绪。
方法二:命令行手动配置(适用于无GUI或批量部署)
1、安装kdump工具包:sudo apt install kdump-tools(麒麟V10)或sudo yum install kexec-tools(麒麟V10 SP1+);
2、编辑配置文件:sudo nano /etc/kdump.conf,确认包含以下关键行:
path /var/crash
ext4 /dev/sda2
core_collector makedumpfile -c --message-level 1 -d 31;
3、分配预留内存:sudo nano /etc/default/grub,向GRUB_CMDLINE_LINUX添加crashkernel=512M;
4、更新GRUB并重启:sudo update-grub && sudo reboot;
【注意:crashkernel参数必须与实际物理内存匹配,小于2GB内存的机器应设为crashkernel=128M,否则kdump服务启动失败】
加载调试内核模块并验证printk级别
调试功能最终要体现在日志可读性上。默认printk日志级别过低,大量关键信息被过滤。需提升控制台输出等级,并确保调试模块能被正确加载。
第一步:提升当前运行内核的printk日志级别
sudo dmesg -n 8
第二步:使该设置在重启后持续生效
echo 'kernel.printk = 8 4 1 7' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
第三步:验证是否生效
执行sudo dmesg | head -20,若看到大量driver probe、ACPI table parsing、PCI device enumeration等详细初始化信息,说明调试日志已打开;
第四步:加载常用调试模块
sudo modprobe devres && sudo modprobe debugfs;
检查是否挂载:ls /sys/kernel/debug —— 若目录存在且非空,debugfs已就绪;
第五步:触发一次简单内核日志输出
echo 'test debug message' | sudo tee /proc/sys/kernel/printk;
立即执行sudo dmesg | tail -5,应可见该测试消息,证明整个调试链路畅通。











