crash 调试kernel

1. 什么是crash

crash是用来调试linux 的kdump生成的vcore,或者用来调试live system;

2. 调试前准备

调试中需要用到vmlinux,该vmlinux与生成vcore或者live system的vmlinuz必须一致,

这就意味着我们需要自己编译内核,生成initrd,更新grub.cfg;

3. 编译内核

下载源码,然后转到源码目录(或者新建一个目录,在该目录下运行make -C /usr/src/linux O=`pwd`);

将当前运行内核的config文件拷过来(位置在/boot 目录下,config*等文件),重命名为.config;

在编译内核之前,需要确认.config中,以下编译选项是否打开:

(1)CONFIG_DEBUG_INFO ,必须打开该选项,否则crash会出现以下错误:

crash no debugging data available

(2)CONFIG_STRICT_DEVMEM,必须打开该选项,否则crash会出现以下错误:

crash: read error: kernel virtual address: c0670680  type: "kernel_config_data"

WARNING: cannot read kernel_config_data

crash: read error: kernel virtual address: c066bb68  type: "cpu_possible_mask"

设置完毕,开始编译,依次运行如下命令:

(1) make bzImage

(2) make modules

(3) make modules_install

(4) make install (运行该命令后,会在/boot目录下生成我们自己的vmlinuz)

4.  生成initrd

转到/boot 目录下,运行update-initramfs -c -k [version] ,如我编译的内核为2.6.38.6,则生成的

vmlinuz为vmlinuz-2.6.38.6, 运行update-initramfs -c -k 2.6.38.6生成的为initrd.img-2.6.38.6;

5.  更新grub.cfg

首先备份下/boot/grub/grub.cfg,然后运行update-grub2命令即可;如有必要,可以调整下启动项之间的位置;有的系统可能直接启动内核,不给我们选择的机会,此时要修改/boot/grub/grub.cfg,将下面代码注释(不同的系统有所不同,总之就是要给我们选择的时间)

### BEGIN /etc/grub.d/30_os-prober ###

if [ ${timeout} != -1 ]; then

if keystatus; then

if keystatus --shift; then

set timeout=-1

else

set timeout=0

fi

else

if sleep --interruptible 3 ; then

set timeout=0

fi

fi

fi

#### END /etc/grub.d/30_os-prober ###

6. 更新crash

在完成以上内容之后,重启系统,然后选择我们自己编译的内核,进入系统后,进入我们编译内核时的目录,该目录下有我们自己的vmlinux(未压缩的),然后运行如下命令就可以对当前内核进行调试:

crash vmlinux

如果出现错误:

crash: cannot resolve: "xtime"

则说明需要更新crash,可以去http://people.redhat.com/anderson下载最新的crash,自己进行编译(下载后,直接make即可运行);

我下的版本为crash 6.1.0,可以调试的最高内核版本为3.6(当前的最新版本);

参考:

http://people.redhat.com/anderson

crash 调试kernel

时间: 2024-10-27 18:33:44

crash 调试kernel的相关文章

xcode 上 crash 调试的三种方法

最近有新人问crash调试方法,简介记录如下: 模拟器调试 打开控制台查看输出日志 显示出错的行数 显示出错的函数iOS Crash跟踪 真机调试 首先修改真机调试的 bundle ID,使代码可以进行真机调试,连接真机.然后增加 Exception Breakpoint,运行程序,断点将打印出出错的位置和函数名. 运行在真机 连接真机,选择windows->devices->选择连接的真机;运行程序,控制台将输出所有运行在真机上的log. 选择按钮"View Device Logs

Eclispe+qemu+gdb调试linux Kernel

单步调试kernel说明 恩,这个文档的目标是单步调试内核,从每一个工具软件的版本号到每一个命令,都有一个说明 ubuntu1204,32位 http://www.ubuntu.org.cn/download/desktop 用vmware虚拟机安装该系统. 用64位系统时,gdb有bug.报错信息为:xxx太长.所以建议用32位系统 编译kernel 3.5.4 下载内核的地址,北京交通大学的映像地址:http://mirror.bjtu.edu.cn/kernel/linux/kernel/

Linux内核调试:kdump、vmcore、crash、kernel-debuginfo【转】

转自:https://blog.csdn.net/guowenyan001/article/details/19807555 一.简介 linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore. 可以通过分析vmcore分析出内核崩溃的原因. crash是一个被广泛应用的内核奔溃转储文件分析工具. 使用crash调试内核转储文件,需要安装crash工具和内核调试工具kernel-debuginfo. 二.安装kudmp.crash.kernel-debuginfo 安装包的版本,要

使用crash提取vmcore中预分析信息

一.介绍 在linux系统内核发生崩溃或者服务器hang住时,Kdump(kernel crash dump:内核崩溃转储设备)生成vmcore文件,通过分析vmcore信息判断原因,而 crash是一个被广泛应用的内核奔溃转储文件分析工具,前提系统必须安装crash工具和内核调试工具kernel-debuginfo. 二.工具的安装与调试 1.安装包的版本,要与linux内核一致,查看linux内核版本: #uname -a 2.安装.配置.启动kdump:       安装kdump:  

源码编译绕过反调试

参考师弟的贴子修改的, 基本我一次就弄好了, 没有遇到啥问题, 下面我主要是补充下他的帖子 http://bbs.pediy.com/showthread.php?t=213481 一. 环境搭建 (1). 环境介绍: 手机:nexus 5 ubuntu版本:15.10 android版本:4.4.4 android源码官网(这里有很多相关的资料,基本上按照官网的来就可以编译想编译的任何版本了) http://source.android.com/source/ (2). 环境配置 配置环境得好

随想录(qemu仿真linux kernel)

[ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 算上从研究生开始,自己看kernel的时间不短了.虽然代码看了不少,原理书也看了不少了,但是总觉得理解的不是很透彻.调试kernel最好可以像调试普通执行文件一样,单步执行最好.前一段时间用了qemu之后,发现用qemu调试kernel还真是方便. (1)安装qemu sudo apt-get install qemu-kvm     (2)编译kernel cp /boot/config-

使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境

原总结debug调试kernel debugwindbgbcdeditvirtualKD转储双机调试双机内核调试 前言 当我们没有两台物理机时,又想做双机内核调试怎么办?当然是装虚拟机啦!本文总结了使用 VMware15.5 + win10 + virtualkd + windbg 搭建双机内核调试环境. 安装环境 VMware 版本: 15.5 pro .可以到 VMware 官网下载地址 下载最新版本. 我的物理主机系统:win10 1909.其它版本的 windows 也可以,VMware

第三十篇:Windbg的基础知识

Windbg是一个非常强大的工具. 刚刚开始,是为了替代SoftICE调试自己开发的AVStream/BDA驱动程序,以及分析由此驱动软件产生的Kernel Dump. 之后,参与xHCI USB3.0/3.1 IP的开发,Windbg主要用来分析该硬件产生的Kernel Dump. 第二篇:欲善其事,先利其器-USB3.0 Kernel debug extension 第五篇:风起于青萍之末-电源管理请求案例分析(上, 中, 下) 第十三篇:无征不信,不信民弗从--USB-IF官方驱动BSOD

kdump 的使用在linux崩溃时

Centos7/RHEL7 开启kdump 翻译 2017年12月18日 16:58:28 标签: kernel / kdump / crash / centos 437 原文链接<How to enable Kdump on RHEL 7 and CentOS 7> Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核, 该内核会将此时内存中的所有运行状态和数据信