编译内核开启crash&kdump支持

内核编译选项

以下选项没有需要补齐:

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
    

系统配置&测试

  1. 安装kdump工具

    apt kdump-tools
    
  2. 添加grub参数 crashkernel=256M

    root@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=""
    
  3. 更新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,此处 UOSdump.xxx,同级目录下 dmesg.xxx 是开机日志。两者存在于 /var/crash/$(DATE)/ 目录下

  • 调试启动

    crash /var/crash/$(DATE)/dump.xxxx /usr/lib/debug/vmlinux-xxx
    
  • 其他调试命令
    参考:https://linux.die.net/man/8/crash

你可能感兴趣的:(linux,内核)