搭建kgdb调试环境

1、安装vmware 10,产品密钥5F29M-48312-8ZDF9-A8A5K-2AM0Z


2、安装ubuntu-13.10-desktop-amd64,系统命名为client


3、下载新内核linux-3.4.2.tar.bz2,编译安装,步骤如下:

[root@localhost ~]# ls linux-3.4.2.tar.bz2 
linux-3.4.2.tar.bz2
[root@localhost ~]# tar xjf linux-3.4.2.tar.bz2
[root@localhost ~]# cd linux-3.4.2
[root@localhost linux-3.4.2]# make menuconfig 选中如下:(老版本内核需打上kgdb补丁才能支持远程调试,新版本内核已集成支持远程调试功能)
General setup  --->
[*] Prompt for development and/or incomplete code/drivers
Kernel hacking  --->
[*] Compile the kernel with debug info
[*] Compile the kernel with frame pointers
[*] KGDB: kernel debugger  --->
<*>   KGDB: use kgdb over the serial console
[root@localhost linux-3.4.2]# make
[root@localhost linux-3.4.2]# make modules
[root@localhost linux-3.4.2]# make modules_install
[root@localhost linux-3.4.2]# make install


4、修改配置文件,使默认启动的内核版本为3.4.2

[root@localhost linux-3.4.2]# vi /etc/grub.conf
将dfault值由1改为0,保存
[root@localhost linux-3.4.2]# reboot
[root@localhost linux-3.4.2]# uname -r
3.4.2


5、将安装3.4.2内核的linux系统,完整拷贝一份,命名为server


在虚拟机中打开名为server的linux系统,为其添加串口,设置如下:

然后启动;为client机也添加串口,设置如下:


6、测试串口是否配置正确,在server侧执行:

[root@localhost ~]# cat /dev/ttyS1
在client侧执行:
[root@localhost ~]# echo Hello > /dev/ttyS1
若在server侧显示Hello说明串口配置正确


7、修改server侧配置文件

[root@localhost ~]# vi /etc/grub.conf
在crashkernel=auto与KEYBOARDTYPE=pc之间添加如下内容:
kgdboc=ttyS1,115200 kgdbwait
kgdboc意为kgdb over console,kgdbwait意为在内核启动过程中等待gdb的连接。重启会阻塞等待client机连接:
图片4


8、客户机安装gdb

[root@localhost ~]# yum install gdb
[root@localhost ~]# gdb -v
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
说明已安装成功
[root@localhost ~]# cd /root/linux-3.4.2
[root@localhost linux-3.4.2]# gdb vmlinux 载入可调式文件
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS1
Remote debugging using /dev/ttyS1
kgdb_breakpoint (new_dbg_io_ops=0xc0ad9220) at kernel/debug/debug_core.c:987
987 wmb(); /* Sync point after breakpoint */
(gdb) continue 继续执行
Continuing.
至此,环境搭建成功,接下来便是如何使用


补充:
[root@localhost ~]# ls -l /proc/sysrq-trigger 
--w-------. 1 root root 0 Oct  2 04:47 /proc/sysrq-trigger
只有root可写访问,加sudo也不行
[root@localhost ~]# chmod 222 /proc/sysrq-trigger 
此时任何用户都可写访问该文件
[root@localhost ~]# echo g>/proc/sysrq-trigger
使server进入kgdb中断状态,等待client连接;如想让其退出kgdb中断状态,则在client侧输入c


简单使用(调试proc.ko驱动模块):
在server侧:
[root@localhost test]# ls proc.ko 
proc.ko
[root@localhost test]# insmod proc.ko
获得模块在内核中加载地址:
[root@localhost test]# cat /sys/module/proc/sections/.text 
0xf7e4c000
使server进入kgdb中断状态:
[root@localhost ~]# echo g>/proc/sysrq-trigger
将proc.ko拷贝到client侧调试:
[root@localhost test]# ls
proc.ko
(gdb) add-symbol-file /root/test/proc.ko 0xf7e4c000
add symbol table from file "/root/test/proc.ko" at
.text_addr = 0xf7e4c000
(y or n) y
Reading symbols from /root/test/proc.ko...done.
接下来,就是简单的操作……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值