编译内核开启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. 检查可捕获的kdump大小,cat /etc/default/grub.d/kdump-tools.cfg
    在这里插入图片描述
    如果没有文件或者 crashkernel=xxx 的参数那么需要编辑文件:/etc/default/grub

    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=""
    

    注:如果发生crash后卡死在kexec切换内核的步骤,尝试将调大并且不设置上限:crashkernel=512M

  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)/ 目录下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kdump是一个在Linux内核崩溃时收集dump信息的工具。它的设计目标是在遇到内核崩溃时,能够提供完整的内核转储信息,以便开发人员进行分析和调试。 kdump的工作原理是在系统启动时,设置一个保护内存区域,用于在内核崩溃时存储dump信息。当系统出现崩溃时,kdump会触发一个内核崩溃的路径,将所有的内核状态信息存储在这个保护区域中。然后,kdump会加载一个独立的小内核,这个小内核只包含了最小的功能,仅仅用于将之前存储的内核状态信息写入磁盘。这样,即使主内核发生崩溃,kdump仍然能够将dump信息保存下来。 kdump所收集的dump信息包含了内核的堆栈、寄存器的状态、内核模块列表、内核代码和数据段等。这些信息对于开发人员分析和调试内核问题非常有帮助。无论是内核中的软件错误、硬件故障还是系统配置错误,都能够通过kdump的信息来定位和解决问题。 为了使用kdump,我们首先需要安装kexec工具,然后对系统进行一些配置,如设置内存保护区域的大小、crashkernel参数等。配置完成后,重新启动系统,当系统崩溃时,kdump就会自动工作。 总结来说,kdump是一个非常有用的Linux内核调试工具,能够在内核崩溃时提供完整的dump信息,为开发人员提供了方便的分析和调试手段。它能够帮助我们快速定位和解决各种内核问题,提高系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值