內(nèi)核打印基本規(guī)則#
- dev_info()
啟動(dòng)過(guò)程骏全、或者模塊加載過(guò)程等“通知類的”信息等,一般只會(huì)通知一次尼斧,例如probe函數(shù) - dev_dbg()
一般使用在普通錯(cuò)誤姜贡,如-EINVAL、-ENOMEM等errno發(fā)生處突颊,用于調(diào)試 - dev_err()
一般使用在嚴(yán)重錯(cuò)誤鲁豪,尤其是用戶無(wú)法得到errno的地方,或者程序員不容易猜測(cè)系統(tǒng)哪里出了問(wèn)題的地方
打印dev_dbg#
A dynamic_debug##
a. CONFIG_DYNAMIC_DEBUG=y & CONFIG_DEBUG_FS=y
mkdir debugfs mount -t debugfs none */debugfs
cat /mnt/dbg/dynamic_debug/control
[ping]ping_rcv =_ "no socket, dropping\012" 不會(huì)打印
[ping]ping_rcv =p "rcv on socket %p\012" 則會(huì)打印
- 函數(shù)dynamic debug
echo -n 'func xxx +p' > */debugfs/dynamic_debug/control
echo -n 'func xxx -p' > */debugfs/dynamic_debug/control
- 文件dynamic debug
echo -n 'file alicert.c +p' > */debugfs/dynamic_debug/control
echo -n 'file alicert.c -p' > */debugfs/dynamic_debug/control
- 模塊dynamic debug
echo -n 'module alicert +p' > */debugfs/dynamic_debug/control
echo -n 'module alicert -p' > */debugfs/dynamic_debug/control
b. echo 8 > /proc/sys/kernel/printk 或 dmesg 查看相應(yīng)dev_dbg()的輸出信息
B Makefile添加編譯選項(xiàng)##
在drivers/*/Makefile中定義編譯選項(xiàng)
ccflags-y := -DDEBUG
開(kāi)發(fā)版本律秃,打開(kāi)CONFIG_DYNAMIC_DEBUG和CONFIG_DEBUG_FS爬橡,配合dbgfs動(dòng)態(tài)觀測(cè)和調(diào)試內(nèi)核代碼
正式版本,關(guān)閉CONFIG_DYNAMIC_DEBUG和CONFIG_DEBUG_FS棒动,所有dbgfs以及dev_dbg信息都從編譯階段自動(dòng)移除