linux 内核如何定义自己的打印函数

自己在做watchdog 驱动时使用的简单例子,分享给大家:

定义:

#define WDT_INFO(fmt, ...) \
	pr_info("mero_wdt: %s: " fmt, __func__, ##__VA_ARGS__)
#define WDT_ERROR(fmt, ...) \
	pr_err("mero_wdt: %s: " fmt, __func__, ##__VA_ARGS__)
#define WDT_DEBUG(fmt, ...) \
	pr_debug("mero_wdt: %s: " fmt, __func__, ##__VA_ARGS__)

 使用:

static void
__wdt_stop_nolock(struct mero_watchdog_device *mw)
{
	u32 wtcon, wtclr;
	
	wtcon = ioread32(mw->wdt_base + WDT_WTCON);
	WDT_ERROR("WDT_WTCON ---->  0x%x", wtcon); 

	wtcon = ioread32(mw->wdt_base + WDT_WTCON);
	wtcon &= ~(WDT_CON_ENABLE | WDT_CON_RSTEN);

	WDT_ERROR("0x%x ----> WDT_WTCON", wtcon); 
	iowrite32(wtcon, mw->wdt_base + WDT_WTCON);
	wtcon = ioread32(mw->wdt_base + WDT_WTCON);
	WDT_ERROR("WDT_WTCON ---->  0x%x", wtcon); 
	
	WDT_ERROR("0x12345678 ----> WDT_WTCLRIN");
	iowrite32(0x12345678, mw->wdt_base + WDT_WTCLRINT);
	wtclr = ioread32(mw->wdt_base + WDT_WTCLRINT);
	WDT_ERROR("WDT_WTCLRINT ----> 0x%x", wtclr);
	
	WDT_ERROR("0x87654321 ----> WDT_WTCLRIN");
	iowrite32(0x87654321, mw->wdt_base + WDT_WTCLRINT);
	wtclr = ioread32(mw->wdt_base + WDT_WTCLRINT);
	WDT_ERROR("WDT_WTCLRINT ----> 0x%x", wtclr);

	wtcon = ioread32(mw->wdt_base + WDT_WTCON);
	WDT_ERROR("WDT_WTCON ---->  0x%x", wtcon); 

}

输出:


[  205.619600] mero_wdt: wdt_stop: wdt_stop is called
[  205.620384] mero_wdt: __wdt_stop_nolock: WDT_WTCON ---->  0x9
[  205.621061] mero_wdt: __wdt_stop_nolock: 0x0 ----> WDT_WTCON
[  205.621874] mero_wdt: __wdt_stop_nolock: WDT_WTCON ---->  0x8
[  205.622674] mero_wdt: __wdt_stop_nolock: 0x12345678 ----> WDT_WTCLRIN
[  205.623487] mero_wdt: __wdt_stop_nolock: WDT_WTCLRINT ----> 0x12345678
[  205.624396] mero_wdt: __wdt_stop_nolock: 0x87654321 ----> WDT_WTCLRIN
[  205.625319] mero_wdt: __wdt_stop_nolock: WDT_WTCLRINT ----> 0x87654321
[  205.626229] mero_wdt: __wdt_stop_nolock: WDT_WTCON ---->  0x0

 

你可能感兴趣的:(linux 内核如何定义自己的打印函数)