Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584281
  • 博文数量: 70
  • 博客积分: 3736
  • 博客等级: 中校
  • 技术积分: 1728
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-08 09:15
文章分类
文章存档

2014年(1)

2012年(21)

2011年(7)

2010年(28)

2009年(13)

分类: LINUX

2010-02-02 14:24:29

调试驱动方法:
1.
判断有没有进入asm_do_IRQ函数
这个函数在linux-2.6.x/arch/arm/kernel/irq.c文件中定义
2.
判断有没有进入handle_level_irq或者handle_edge_irq函数。
这两个函数在linux-2.6.x/kernel/irq/chip.c文件中定义。
3.
判断有没有进入驱动的中断服务例程。
这个函数一般由驱动作者编写
4.单步调试
在需要单步调试的文件开头添加如下代码
#include
/* Print trace message */
#define TRACE \
        printk("%s: %s(): line %d\n", MOD_NAME, __FUNCTION__, __LINE__)

或者将此代码放入一个独立的头文件中,这样整个驱动都可以通过include头文件来打印调试信息
在可疑的代码出加入TRACE标记,单步跟踪代码。
5.当不知道某个函数的调用层次时,可以在该函数里边加入一条非法语句(任何会引起oops的语句)
这样,内核在打印出oops错误的同时,也会打印出此函数的调用层次。

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

chinaunix网友2010-06-08 15:15:30

驱动的Makefile PWD:=$(shell pwd) KERNEL_SRC = /lib/modules/`uname -r`/build obj-m:=sk_b.o sk_b-objs:=skb.o all: make -C $(KERNEL_SRC) M=$(PWD) modules clean: rm -f *.o rm -f *.ko rm -f .*.cmd rm -rf .tmp_versions rm -f *.mod.c rm -f *.symvers rm -f *.order