读取时是否可以显示module_param的值,以十六进制显示?
我的linux设备驱动程序中有这段代码:
module_param(num_in_hex, ulong, 0644)
$cat /sys/module/my_module/parameters/num_in_hex
1234512345
希望以十六进制显示该值,而不是十进制。或者,我应该使用不同的方法,如debugfs吗?
答案 0 :(得分:1)
没有就绪参数type
(module_param
宏的第二个参数),它将其参数输出为十六进制。但要实现它并不困难。
模块参数由回调函数驱动,回调函数从字符串中提取参数的值,并将参数的值写入字符串。
// Set hexadecimal parameter
int param_set_hex(const char *val, const struct kernel_param *kp)
{
return kstrtoul(val, 16, (unsigned long*)kp->arg);
}
// Read hexadecimal parameter
int param_get_hex(char *buffer, const struct kernel_param *kp)
{
return scnprintf(buffer, PAGE_SIZE, "%lx", *((unsigned long*)kp->arg));
}
// Combine operations together
const struct kernel_param_ops param_ops_hex = {
.set = param_set_hex,
.get = param_get_hex
};
/*
* Macro for check type of variable, passed to `module_param`.
* Just reuse already existed macro for `ulong` type.
*/
#define param_check_hex(name, p) param_check_ulong(name, p)
// Everything is ready for use `module_param` with new type.
module_param(num_in_hex, hex, 0644);
检查include/linux/moduleparam.h实现module_param
宏和kernel/params.c以实现现成类型的操作(宏STANDARD_PARAM_DEF)。