smb server打印函数是ksmbd_debug()
,相关代码如下:
ksmbd_debug// 拼接成 KSMBD_DEBUG_ALL 等宏定义
if (ksmbd_debug_types & KSMBD_DEBUG_##type)
// 使用宏拼接
CLASS_ATTR_RW(debug)struct class_attribute class_attr_debug = __ATTR_RW(debug)
0644, debug_show, debug_store)
__ATTR(debug,
.attr = {.name = __stringify(debug),
__stringify_1(x)#debug ==> /sys/class/ksmbd-control/debug文件
.show = debug_show,
.store = debug_store,
// 还是宏拼接
ATTRIBUTE_GROUPS(ksmbd_control_class)
ksmbd_control_class_group
.attrs = ksmbd_control_class_attrs
__ATTRIBUTE_GROUPS(ksmbd_control_class)// 引用这个变量的是ksmbd_control_class
ksmbd_control_class_groups[]
&ksmbd_control_class_group,
static struct class ksmbd_control_class = {
"ksmbd-control", ==> /sys/class/ksmbd-control/目录
.name =
.class_groups = ksmbd_control_class_groups, };
通过读写/sys/class/ksmbd-control/debug
文件控制,但我们一般不直接操作这个文件,而是用以下命令控制打印的开关:
ksmbd.control --help # 查看帮助
# COMPONENT的值有: `all', `smb', `auth', `vfs', `oplock', `ipc', `conn', or `rdma'
ksmbd.control --debug=vfs
ksmbd.control --debug= # 不加COMPONENT可以查看当前的状态
smb client打印函数有cifs_dbg()
、cifs_server_dbg()
、cifs_tcon_dbg()
、cifs_info()
,要打开配置CONFIG_CIFS_DEBUG
才有效,打开CONFIG_CIFS_DEBUG2
和CONFIG_CIFS_DEBUG_DUMP_KEYS
能打印更多信息,以cifs_dbg()
为例代码如下:
cifs_dbg
cifs_dbg_func(once, ...)// 还有 pr_err_once
pr_debug_once // 只打印一次
printk_once
cifs_dbg_func(ratelimited, ...)// 还有 pr_err_ratelimited
pr_debug_ratelimited // 打开了配置 CONFIG_DYNAMIC_DEBUG __dynamic_pr_debug
动态打印相关的内容请查看《内核调试方法》。
请查看《nfs调试方法》。