设为首页 收藏本站
查看: 1236|回复: 0

[经验分享] vmware虚拟机搭建Kgdb环境

[复制链接]

尚未签到

发表于 2015-4-6 15:55:44 | 显示全部楼层 |阅读模式
  参考internet上的一篇文章《VMware下搭建kgdb环境》,我在SUSE11环境下进行试验。
  一、    系统环境:
1、VMware版本6.5。
2、两台虚拟机,均为suse11操作系统,运行内核为2.6.32
  二、虚拟机配置:
被调试的系统为server(target machine),调试的系统为client(development machine),在关机状态下,为两台系统各添加一个串口Serial Port,注意创建虚拟机的时候可能会需要手动add Serial设备。

Server端配置:
DSC0000.jpg

client端配置: DSC0001.jpg

串口设置完毕,然后开机进入系统,在server的终端输入:cat /dev/ttyS0 .
在client的终端输入echo hello > /dev/ttyS0,
如果server上显示hello,说明串口设置成功。

三、client端编译内核(选上kgdb选项)。
此步的目的是为了把kgdb功能编译进内核,因为正在运行的内核中是没有kgdb功能的。
进入client,把内核拷到/work目录下:
  cd /work/linux-2.6.32
  cp /boot/config-2.6.32.12-0.7-default  . //利用原系统的config配置
  make clean //清除生成的中间文件
修改Makefile文件中的:EXTRAVERSION = -xhawk(你自己给新内核取的名字)
  make menuconfig
·File System --> 下面把ext3,ext2都编译进内核(就是把前面的M变成*)
·Kernel Hacking -->
             选中Compile the kernel with frame pointers
             选中KGDB:kernel debugging with remote gdb
             并确认以下两项也是选中的(他们应该默认是选中的)
             选中 kernel debugging
             选中 Compile the kernel with debug info
·对于其它选项,请按实际情况,或你的要求定制.
·保存退出
  修改编译选项:
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
CFLAGS += -O //原来是-Os 这个比 –O2 优化的还厉害呢
else
CFLAGS += -O2
Endif

ifdef CONFIG_DEBUG_INFO
CFLAGS += -g -ggdb
Endif

  make (编译内核)
  make modules_install (安装内核模块)
  make install (安装内核)
此时client端已经更新了新的内核,grub文件也改为从新内核启动。

四、把/work/linux-2.6.32拷贝到server端
scp -r /work/linux-2.6.32 root@192.168.220.132:/srvwork

五、给server端安装新内核
cd /srvwork/linux-2.6.32
make modules_install
make install
修改server的menu.lst,增加两个用新内核的启动项目。
·    第一个启动项在原来的基础上添加了kgdb的参数:kgdboc=ttyS0,115200
kgdboc 的意思是 kgdb over console,这里将kgdb连接的console设置为ttyS0,波特率为115200,
如果不在内核启动项中配置该参数,可以在进入系统后执行命令: echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc   
·    第二个启动项,增加参数:kgdboc=ttyS0,115200 kgdbwait参数,kgdbwait 使 kernel 在启动过程中等待 gdb 的连接。
重启server,选择第二个启动项,即kgdbwait项目。
启动后,server端会停留在kgdb:waitting for connection from remote gdb
说明server已经进入调试状态,等待gdb连接

六、调试进入client系统并启动gdb:
cd /work/linux-2.6.32
gdb vmlinux
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0
此时应该能出现:
Remote debugging useing /dev/ttyS0
kgdb_breakpoint() at kernel/kgdb.c 1721
1721 wmb()

类似这样的内容说明连接已经成功。这时你可以像使用本地gdb一样设置断点(break),单步执行(step),或其它命令.

(gdb) continue
执行continue,Server就继续下面的系统初始化了.

系统启动完成后,就可以进行内核的调试了,在server的终端输入:
  echo g > /proc/sysrq-trigger
然后系统会中断,进入调试状态,等待远端gdb的连接。
Server进入调试状态后,转换到client系统,重复上面对client的步骤就可以对内核进行调试了。

七、我实践中遇到的问题
SUSE11新内核启动失败,问题如下:
Warning:module /lib/modules/2.6.32/kernel/drivers/hwmon/hwmon.ko is unsupported
……
FATAL:module jdb not found
FATAL:module ext3 not found
FATAL:module /lib/modules/2.6.32/kernel/drivers/firmware/edd.ko is unsupported
最后发现是因为在make 之后多用了一次make modules。其实make本身已经包含了make bzImage/make modules;
经验1:通过修改Makeflie设定自己的内核版本,在make install的时候就会保留原来的内核版本
经验2:先把client的内核编译完毕,然后clone整个client,省去了scp需要的大量时间。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-54351-1-1.html 上篇帖子: vmware获取主机、数据中心等对象ManagedObjectReference 下篇帖子: 给vmware workstation虚拟机添加一块共享磁盘用来模拟iscsi存储
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表