kernel中外部传递参数使用方法
在 Linux 内核模块开发中,module_param(rpc_tdebug, uint, 0600);
表示定义一个可通过外部传递参数进行配置的模块级变量,具体解析如下:
-
参数名称
rpc_tdebug
是模块参数的变量名,该变量需在代码中提前声明为静态全局变量(例如static uint rpc_tdebug;
) -
参数类型
uint
表示该参数为无符号整型(unsigned int),符合内核支持的module_param
基础类型之一 -
访问权限
0600
是八进制权限值,表示在 sysfs 文件系统中生成的参数文件权限为:- 用户(Owner):可读可写(
rw-
) - 组(Group):无权限(
---
) - 其他用户(Others):无权限(
---
)
- 用户(Owner):可读可写(
-
功能作用
- 模块加载时,可通过
insmod
命令直接赋值,例如:insmod module_name.ko rpc_tdebug=1
- 模块加载后,可通过
/sys/module/[模块名]/parameters/rpc_tdebug
文件动态查看或修改该参数值(需权限允许)
- 模块加载时,可通过
使用示例:
某kernel drvier 代码中追加如下内容
static unsigned int rpc_tdebug;
module_param(rpc_tdebug, uint, 0600);
MODULE_PARM_DESC(rpc_tdebug, "Testdebug switch for rpc debug");
#define ALAP_DEBUG_L1(str, args...) do {\
if (rpc_tdebug > 0)\
dev_info(&spi->dev, str, ##args);\
} while (0)\
#define ALAP_DEBUG_L2(str, args...) do {\
if (rpc_tdebug > 1)\
dev_info(&spi->dev, str, ##args);\
} while (0)\
代码中使用该宏来描述相关log,可以在后期动态调整log等级
控制台输入命令
echo 2 >/sys/module/alap_rpc/parameters/rpc_tdebug
输入前效果
输入后效果