linuxカーネルはどのように自分の印刷関数を定義します
2105 ワード
自分が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