Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51365
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 147
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-03 11:00
个人简介

navigation、linux、内核、网络技术、网卡驱动、qt、android、ios、irrlicht、ogre

文章分类

全部博文(11)

文章存档

2016年(1)

2013年(10)

我的朋友

分类: LINUX

2013-04-09 14:37:20

     最近在做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

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