2016年1月25日 星期一
核心偵錯技巧....printk
技巧 1:
改一個會變身的的printk()...
#undef PDEBUG
#ifdef SCULL_DEBUG
#ifdef __KERNEL__
/* 用於kernel space 的debug
#define PDEBUG(fmt, args...) printk(KERN_DEBUG "scull:" fmt, ##args)
#else
/* 用於user space 的 debug
#define PDEBUG(fmt,args...) fprintf(stderr, fmt, ## args)
#endif
#else
#define PDEBUG(fmt, args...) /*不偵錯*/
#endif
然後修改 Makefile
DEBUG = y
ifeq($(DEBUG),y)
DEBFLAGS = -O -g -DSCULL_DEBUG
else
DEBFLAGS = -O2
endif
CFLAGS +=$(DEBFLAGS)
以後只要需要開始kernel space 的 debug...
只要在Makefile 裡面加上 DEBUG =y
就可以讓 PDEBUF -> printk...
如果已經debug完....不需要再printk....就可以把 變數DEBUG 設成 n 就可以了
技巧 2: 節制訊息產生的速率
if(printk_ratelimit())
printk();
printk_ratelimit() 的原理是追蹤已有多少的訊息被送到操控台...若訊息超過臨界點,
printk_ratelimit() 就傳回 0....並丟棄訊息...
技巧3 : /proc 是核心模擬出來的軟體檔案系統..他是核心對於外界的資訊窗口....
以 /proc/modules ..他會告訴你核心當時已經載入了那些模組...
Reference : linux 驅動程式
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言