Linux调试方式之动态打印(module_param_named)

Linux调试方式之动态打印(module_param_named)

内核版本Linux4.4
作者nineyole

module_param_named分析

在很多时候,我们需要记录一些调试信息,如果每次都用printk打印,会有很多无用代码,因此可以调用如下代码来申明一个变量。

module_param_named(dbg_level, dbg_enable, int, 0644);

其中module_param_named定义如下:

#define module_param_named(name, value, type, perm)			   \
	param_check_##type(name, &(value));				   \
	module_param_cb(name, &param_ops_##type, &value, perm);		   \
	__MODULE_PARM_TYPE(name, #type)

上面的函数主要有以下几个说明:

1、调用param_check_##type方法,##用于连接两个字符,如果type是int,也就说说执行param_check_int,主要作用就是检查变量是不是int 类型

2、调用module_param_cb,针对int类型就是param_ops_int

3、最后调用__MODULE_PARM_TYPE方法指定我们的type也就是int,#的用法在我上面提到的专栏文章中也已经说到

这样一来,可以很清楚的理解了,不过需要注意的是module_param_cb这个方法有时还是不可或缺的,就像上面我们不只是要进行参数检查。

module_param_named使用案例

static int dbg_enable;
module_param_named(dbg_level, dbg_enable, int, 0644);

#define DBG(args...) \
	do { \
		if (dbg_enable) { \
			pr_info(args); \
		} \
	} while (0)

通过上面的之后,就会在/sys/module/${modulename}/parameters/目录下创建一个内核模块,然后可以使用

echo -n > /sys/module/value>/sys/module/ {modulename}/parameters/${parm}"命令修改其对应的参数,从而实现参数打印。

比如对电量计cw2015或者bq25703的相关驱动就可以使用下面的方式来动态调整打印日志。

echo 1 >/sys/module/cw2015_battery/parameters/dbg_level
echo 1 > sys/module/bq25700_charger/parameters/dbg_level

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nineyole

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值