内核编译选项
以下选项没有需要补齐:
CONFIG_KEXEC=y
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_CORE=y
CONFIG_CRASH_CORE=y
CONFIG_SYSFS=y
CONFIG_DEBUG_INFO=Y
CONFIG_CRASH_DUMP=y
CONFIG_PROC_VMCORE=y
CONFIG_RELOCATABLE=y
构建脚本 build_deb.sh
:
- 使用方法
./build_deb.sh 内核源码文件夹 defconfig配置文件
- 内容:
#!/bin/sh -e apt-get install -y \ libncurses5-dev u-boot-tools libssl-dev flex bison libncursesw5-dev \ dpkg-dev fakeroot make bc unzip build-essential libelf-dev shell_dir=$PWD source_dir=$1 config=$2 if [ -e $shell_dir/build_src_tmp ]; then rm -rf $shell_dir/build_src_tmp fi cp -r $shell_dir/$source_dir $shell_dir/build_src_tmp cd $shell_dir/build_src_tmp sed -i "7i timestamp=\$(date +%Y%m%d)" scripts/package/mkdebian sed -i s#"revision=\$(cat .version 2>/dev/null||echo 1)"#" revision=\${timestamp}"#g ./scripts/package/mkdebian #生成内核配置文件 cp -v $shell_dir/$config $shell_dir/build_src_tmp/arch/x86/configs/ make $config #判断deepin-apigail-generate存不存在 if [ ! -e /bin/deepin-apigail-generate ]; then touch /bin/deepin-apigail-generate chmod +x /bin/deepin-apigail-generate fi touch /bin/deepin-apigail-compare chmod +x /bin/deepin-apigail-compare make deb-pkg -j$(nproc) cd $shell_dir
系统配置&测试
-
安装kdump工具
apt kdump-tools
-
检查可捕获的kdump大小,cat /etc/default/grub.d/kdump-tools.cfg
如果没有文件或者 crashkernel=xxx 的参数那么需要编辑文件:/etc/default/grubroot@DAS-OS:~# cat /etc/default/grub GRUB_BACKGROUND="/boot/grub/splash.png" GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="DAS-OS" GRUB_CMDLINE_LINUX_DEFAULT=" net.ifnames=0 biosdevname=0 vga=788 console=tty0 console=ttyS0,115200n8 crashkernel=256M" GRUB_CMDLINE_LINUX=""
注:如果发生crash后卡死在kexec切换内核的步骤,尝试将调大并且不设置上限:crashkernel=512M
-
更新grub索引
grub-mkconfig -o /boot/grub/grub.cfg
有效性测试
- 临时测试(不建议使用)
echo 1 > /proc/sys/kernel/sysrq # kdump使能 echo c > /proc/sysrq-trigger # 强制中断内核生成coredump
- 长期生效
更改/etc/sysctl.d/99-sysctl.conf
文件,最后一行添加:
改完后刷新下服务:kernel.sysrq=1
systemctl restart systemd-sysctl.service
crash
调试 dump
文件
注:网上很多说生成的 dump
文件叫 vmcore
,此处 UOS
叫 dump.xxx
,同级目录下 dmesg.xxx
是开机日志。两者存在于 /var/crash/$(DATE)/
目录下
-
调试启动
crash /var/crash/$(DATE)/dump.xxxx /usr/lib/debug/vmlinux-xxx
-
其他调试命令
参考:https://linux.die.net/man/8/crash