Chinaunix首页 | 论坛 | 博客
  • 博客访问: 773835
  • 博文数量: 239
  • 博客积分: 60
  • 博客等级: 民兵
  • 技术积分: 1045
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-22 18:25
文章分类

全部博文(239)

文章存档

2019年(9)

2018年(64)

2017年(2)

2016年(26)

2015年(30)

2014年(41)

2013年(65)

2012年(2)

分类: LINUX

2013-04-10 11:08:10

     最近在做zerocopy网卡驱动,调试内核是个麻烦事情,大致的从网上找到了一些方法。1、printk  2、kdump  3、kgdb。
由于第三个方法需要两台机器,搭建环境比较麻烦,所以这里我主要是选择了前两个方法进行调试。学习之初就和论坛的内核版主大牛聊过,他说大部分问题都可以使用printk解决,从我这边来看确实是这样的。
由于有一些panic需要定位到比较细致的地方,因此使用kdump来定位。(插一句,panic的时候机器是死机的,这个时候还可以使用串口输出的办法,这里就不说了,的博客里面写明了怎么使用)

一、安装对应软件包
RHEL环境下kdump是默认安装的,实现kdump机制的几个重要的package如下:

kdump,kexec-tools ,kernel-debuginfo 
可以使用 rpm -qa | grep kdump,  rpm -qa | grep kexec, rpm -qa | grep debuginfo分别查询是否安装了对应的包。
我的系统是CentOS6.3,发现前两个包都安装了,只需要下载debuginfo对应的包即可。
这里下载了两个包,
kernel-uek-debuginfo-common-2.6.39-200.24.1.el6uek.x86_64.rpm
kernel-uek-debuginfo-2.6.39-200.24.1.el6uek.x86_64.rpm, 下载地址是  

二、启动kdunp
1、修改grub.conf,在对应的启动内核参数上加上crashkernel=128M,注意在CentOS6.3上必须是crashkernel=128M,而不是传说中的crashkernel=128M@16M,否则重启后还是启动不了kdump

2、设置kdump服务开机是自动启动  chkconfig kdump on 

3、重启机器,可以尝试着service kdump restart

三、测试

通过sysrq强制系统崩溃

echo “c” > /proc/sysrq-trigger

这样系统会奔溃并且重启,重启后会发现/var/crash 下面会有个带有时间的目录,目录下面就是生成的vmcore文件。由于我们安装了debuginfo,会生成这个目录
/usr/lib/debug/lib/modules/2.6.39-200.24.1.el6uek.x86_64/,我们可以这样来调试vmcore文件,这类会把详细的栈信息打印出来

#crash /usr/lib/debug/lib/modules/2.6.39-200.24.1.el6uek.x86_64/vmlinux vmcore

四、调试自己的内核驱动
加载自己的内核驱动,然后启动,等待内核panic并且死机,重启后找到vmcore



#cd /var/crash/127.0.0.1-2013-04-07-10:26:12/             #进入目录                
#crash /usr/lib/debug/lib/modules/2.6.39-200.24.1.el6uek.x86_64/vmlinux vmcore     #开始调试


#mod -S /root/lwbtest/bnx2-uek-39/bnx2     #连接symbo,也就是你的代码目录
#log            #把log显示出来,一直按着空格键到最后,就会出现最后crash的地方,会有一句如下所示的话
       RIP  [] bnx2_alloc_rx_skb+0xb2/0x190 [bnx2]       (注意这个 bnx2_alloc_rx_skb+0xb2,后面的指令需要用到
#l* bnx2_alloc_rx_skb+0xb2
0xffffffffa0459242 is in bnx2_alloc_rx_skb(/root/bnx2-uek-39/bnx2/bnx2.c:3153)这里就会提醒是3153行出问题了,同时下面会显示10行代码。

自己查看对应的代码解决问题就ok

阅读(2202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~