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

[经验分享] 在VMWARE中使用KGDB进行源码级Linux内核调试

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-9 09:15:09 | 显示全部楼层 |阅读模式
Linux Kernel Hacking With KGDB in VMWARE在VMWARE中使用KGDB进行源码级Linux内核调试 CopyRight By MikeFeng [环境]    VMWARE 5.5              Windows XP SP2(可替换)虚拟机Ubuntu 6.06 (被调试机) 虚拟机Kubuntu 6.10 (调试机,可替换为其他linux操作系统)[工具] KGDB 2.4[内核] 2.6.15.5 &#43; KGDB 2.6.15.5补丁[目的] 对Linux 2.6内核进行源码级调试,就像windbg一样。  1.准备工作使用vmware安装Ubuntu6.06和KUbuntu6.10(可替换为其他linux操作系统)。 在kgdb官方网站下载linux-2.6.15.5.tar.bz2和linux-2.6.15.5-kgdb-2.4.tar.bz2,将这些source移至/usr/src并且解包。因为Ubuntu 6.06的内核是2.6.15的,因此内核编译成功性稍大一点,推荐在Ubuntu 6.06上进行编译。 linux-2.6.15.5-kgdb-2.4.tar.bz2中含有对linux-2.6.15.5的kgdb补丁,推荐按照以下顺序用patch命令打补丁(假设你装的是32位的ubuntu):cd /usr/src/linux-2.6.15.5patch –p1 < ../linux-2.6.15.5-kgdb-2.4.tar.bz2/core-lite.patchpatch –p1 < ../linux-2.6.15.5-kgdb-2.4.tar.bz2/core.patchpatch –p1 < ../linux-2.6.15.5-kgdb-2.4.tar.bz2/i386-lite.patchpatch –p1 < ../linux-2.6.15.5-kgdb-2.4.tar.bz2/ i386.patchpatch –p1 < ../linux-2.6.15.5-kgdb-2.4.tar.bz2/ 8250.patch其他补丁可以不用打。 2.编译内核Make menuconfig,按照KGDB官方网站上的说明文档配置必要的KGDB选项。注意将默认的串口1改为0。这个在make menuconfig的过程中不能更改,可以通过make oldconfig进行交互式配置更改,也可以在make menuconfig之后编辑kernel source目录下生成的.config文件,确保关于kgdb的配置如下(特别是最后一句)CONFIG_KGDB_8250_NOMODULE=yCONFIG_KGDB_8250=yCONFIG_KGDB_SIMPLE_SERIAL=yCONFIG_KGDB_BAUDRATE=115200CONFIG_KGDB_PORT_NUM=0然后就是编译了。编译能否成功除了看人品之外,还需要注意别用版本太高或者太低的gcc编译器。据说4.1版本的gcc加入了堆栈溢出保护的功能,如果碰到堆栈什么符号未定义之类的错误,那么先确认自己的gcc版本是不是太高了。使用debian特有的命令进行编译配置,大致流程如下。不推荐直接用make,配置起来麻烦。make-kpkg cleanfakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers 在--append-to-version= 后面你可以写上任何字符串来区别内核版本, 但是必须以&quot; - &quot;符号开始而且后面不包括任何空&#26684;. 如果在编译过程中出现某些错误,那么请在make menuconfig中不要将相关功能选中,确保通过编译。每次编译都要花较长时间,大概在半小时到一小时左右。其中大部分时间都花在内核模块文件的生成上。 3.安装内核 编译完成之后,可以在/usr/src目录中发现多了两个.deb文件,安装可以用dpkg命令:dpkg -i linux-image-2.6.15.5-kgdb_10.00.Custom_i386.debdpkg -i linux-headers-2.6.15.5-kgdb_10.00.Custom_i386.deb安装会自动将生成的内核vmlinuz和initrd.img拷贝至/boot/目录中,并且更改grub设置。察看menu.lst(或者grub.conf)文件可以看到在启动项最后添加了两项。将其中一项按照kgdb的官方说明文档更改为如下所示:title     Ubuntu, kernel 2.6.15.5-kgdbroot    (hd0,0)kernel   /boot/vmlinuz-2.6.15.5-kgdb root=/dev/sda1 ro kgdbwait kgdb8250=0, 115200initrd   /boot/initrd.img-2.6.15.5-kgdbsavedefault boot其中关于root的配置因人而异,可以不是sda1。 4.配置虚拟机更改两台机器的vmware配置,分别加上一个串口。注意被调试机要选this end is the client, the other end is a virtual machine,而调试机要选this end is the server,the other end is a virtual machine。可以用在被调试机上打命令cat /dev/ttyS0,在调试机上打echoabc > /dev/ttyS0来测试设置是否生效。测试之间别忘了检查下网络是否能相互连通,本地vmware NAT/DHCP之类的服务有没有被禁用。通过测试之后就剩最后一步了。 5.联机调试启动被调试机,根据提示按esc进行grub选择。选择刚才生成的新内核,等待Ok.booting the kernel的出现。在调试机上进行如下设置,确保串口通信速率是115200,端口是0stty ispeed 115200 ospped 115200 < /dev/ttyS0确保调试机和被调试机的源码和System.map一致,然后将目录切换至源码目录,输入gdb vmlinuz(gdb) target remote /dev/ttyS0等待断点。如果收到的是error,那么就是串口端口相关的配置没有设定好,或者是gdb版本太低。检查make menuconfig中的端口配置,检查grub中的设定,检查stty命令是否正确。如果收到的是类&#20284;于breakpoint () at gdbstub.c 1153之类的信息,那么恭喜你,你成功了。             版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-124556-1-1.html 上篇帖子: VMware Workstation7.0.1 + ubuntu9.10开发环境 下篇帖子: VMware_Workstation 6. 0以上版本虚拟机与华为3G无线上网卡驱动有冲突
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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