Vmware+gdb调试Linux内核——工欲善其事,必先利其器
今天我最终忍受不了qemu的低速跟不可理喻的各种bug,開始寻找新的调试内核的方法。然后想到了Vmware,那么成熟的虚拟机怎么可能调试不了内核。于是尝试了一番,发现结果很的棒!所以立刻奋笔疾书。把这种方法记录下来。
我们这里主要分成几个步骤:
1、vmware和linux的安装
2、vmware编译Linux内核
3、vmware和gdb主机的配置
4、測试
一、vmware和linux的安装
1)VMware for Linux的安装
官网下载地址:
https://my.vmware.com/web/vmware/details?downloadGroup=WKST-1002-LX&productId=362&rPId=5404
注:官网下载须要进行注冊在太平洋等站点能够找到,但因为csdn博客url限制问题不能列出。
下载完毕之后。chmod a+x filename。然后在终端./filename执行安装程序。接下来和win下的安装基本一样,这里不作具体介绍。
2)Linux虚拟机的安装
安装完vmware之后,我们在虚拟机上安装Linux系统。
并在接下来的(二)中。在Linux虚拟机上编译新的内核。
这里的安装和物理机安装基本事一样的。可是有点小技巧。由于我们接下来须要在Linux虚拟机上编译内核,所以这里建议安装Development,由于编译的时候不仅须要make还需有其它库的支持。我相信没有愿意在虚拟机里面再配一次yum源的。
所以我们在创建虚拟机的时候,须要选择创建之后安装系统:
虚拟机创建完毕后,通过虚拟机的setting属性。设置光盘挂载镜像:
然后启动虚拟机。就能够进行安装。
二、vmware编译Linux内核
1)共享目录的制作
首先选择右键中的install vmware tool,将自己主动把vmware tool的安装文件挂载到光盘。我们把里面的.tar.gz
文件拿出来。解压而且运行里面的安装文件。一路enter就ok了
然后我们在setting中继续例如以下的设置:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR3J1YkxpbnV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" height="361" width="590" alt="">
上图的意思是虚拟机中/mnt/hgfs/HostFile 文件相应主机中/home/sleipnir/Documents文件实现共享
2)内核编译
内核下载:www.kernel.org
我的版本号是2.6.32.62。
不同的版本号编译的方法事有一些差异的。比方2.6.32.61须要改动arch/x86/include/asm/ptrace.h的代码。不然编译会报错。下载下来之后,我们进行解压,然后利用menuconfig进行模块的选择,最后编译。详细的命令行例如以下:
tar xvf kernel-file.tar.gz //解压
cd kernel-file
make menuconfig //利用menuconfig进行模块定义,详细在前面几篇文章中进行了介绍
make -j4 all //编译-j4是使用多线程编译,假设散热不好的机子不建议使用。
过热会导致重新启动
make bzImage //压缩内核
make modules //编译模块
make modules_install //安装模块
make install //安装内核
注意:make install的时候。假设报错ERROR:modinfo:could not find module XXXX能够不用管。reboot之后新内核能够正常执行。至于原理我们这里提供一篇文章进行解释:
三、vmware和gdb主机的配置
完毕了上面步骤之后,我们须要对虚拟机做2步配置
1)将虚拟机上内核的编译目录复制到主机的同样路径以下。比方虚拟机上的编译文件在/usr/kernel/linux-2.6.32.62。
那这里我们须要在主机的同样路经中把linux-2.6.32.62拷贝过来。拷贝的方法能够利用上面的共享目录。
2)在主机上。配置vmware虚拟机的配置文件。配置文件在虚拟机的安装目录中,以.vmx后缀结尾。
往后面加入debugStub.listen.guest32="1"。假设是64位的机器就改成debugStub.listen.guest64="1"
四、測试
1)在主机上打开Vmware(注:临时不须要打开虚拟机)
2)在主机上,进入到内核编译目录(刚刚从虚拟机拷贝过来的)
3)gdb进入调试模式
4)(gdb)file vmlinux
(gdb)target remote localhost:8832(注:这里假设事64位机器则是8864port)
然后打开虚拟机
效果例如以下:
5)(gdb)b start_kernel
(gdb)c
效果例如以下:
Vmware+gdb调试Linux内核——工欲善其事,必先利其器的更多相关文章
- 在qemu环境中用gdb调试Linux内核
简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ...
- Gdb远程调试Linux内核遇到的Bug
知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/gdb-bug 本博客同步在http://www.cn ...
- 利用QEMU+GDB搭建Linux内核调试环境
前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...
- 用qemu+gdb tcp server+CDT调试linux内核启动-起步
用qemu+gdb tcp server+CDT调试linux内核启动-起步 说明: 环境信息与 用virtualbox+模拟串口+CDT调试linux内核 TCP IP协议栈-起步 提到的一样,并且 ...
- 使用QEMU调试Linux内核代码
http://blog.chinaunix.net/uid-20729583-id-1884617.html http://www.linuxidc.com/Linux/2014-08/105510. ...
- VELT-0.1.5开发:使用kgdb调试Linux内核【转】
转自:http://demo.netfoucs.com/lights_joy/article/details/44106589 VELT的全称是Visual EmbedLinuxTools,它是一个与 ...
- 跟踪调试Linux内核的启动过程
跟踪调试Linux内核的启动过程---使用gdb 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...
- 使用 ftrace 调试 Linux 内核【转】
转自:http://blog.csdn.net/adaptiver/article/details/7930646 使用 ftrace 调试 Linux 内核,第 1 部分 http://blog.c ...
- 用 kGDB 调试 Linux 内核
简介 这个文档记录了用kGDB调试Linux内核的全过程,都是在前人工作基础上的一些总结.以下操作都是基于特定板子来进行,但是大部分都能应用于其他平台. 要使用KGDB来调试内核,首先需要修改conf ...
随机推荐
- 减法要用 signed 型
今天调试一个程序,因为Feedback是电流采样值,Setpoint是PWM值,这两个不可能是负值.所以以为Setpoint和Feedback这两个变量都可以设置为u16型(unsigned int) ...
- [POJ2942][LA3523]Knights of the Round Table
[POJ2942][LA3523]Knights of the Round Table 试题描述 Being a knight is a very attractive career: searchi ...
- BZOJ 4070 [Apio2015]雅加达的摩天楼 ——分块 SPFA
挺有趣的分块的题目. 直接暴力建边SPFA貌似是$O(nm)$的. 然后考虑分块,$\sqrt n$一下用虚拟节点辅助连边, 以上的直接暴力连边即可. 然后卡卡时间,卡卡空间. 终于在UOJ上T掉辣. ...
- javascript new关键字做了什么
基本过程 1.创建一个空对象2.空对象的原型指向其构造函数的原型属性3.执行构造函数,且构造函数的this指向该对象4.判断构造函数返回值类型,若为值类型,返回空对象本身,若为引用类型,返回这个引用类 ...
- Serializable在C#中的作用及其优点
原文发布时间为:2009-10-27 -- 来源于本人的百度文章 [由搬家工具导入] Serializalbe - Enable the object can be Serialized into a ...
- 【简单的原创】div简单轮换显示
原文发布时间为:2009-05-10 -- 来源于本人的百度文章 [由搬家工具导入] <html><head><title>div简单轮换显示</title& ...
- 让Dropdownlist既有静态项又有动态项或者既能有编辑项又能绑定数据源
原文发布时间为:2008-10-27 -- 来源于本人的百度文章 [由搬家工具导入] protected void Page_Load(object sender, EventArgs e) //Dr ...
- python编程(python开发的三种运行模式)【转】
转自:http://blog.csdn.net/feixiaoxing/article/details/53980886 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 单循环 ...
- linux内核情景分析之内核中的互斥操作
信号量机制: struct sempahore是其结构,定义如下 struct semaphore { atomic_t count;//资源数目 int sleepers;//等待进程数目 wait ...
- 【转】重装Ubuntu时如何保留/home分区中的数据
Windows系统可以在重装时只格式化C盘,从而保留其他分区的数据. Ubuntu系统也可以,只要在安装系统时分出一个/home分区.你可以把Ubuntu的“/”分区看为Windows的C盘,重装Ub ...