深入探索内核模块:参数验证、浮点运算与自动加载
1. 内核模块参数验证
在默认情况下,所有内核模块参数都是可选的,用户可以选择是否显式传递这些参数。但如果项目要求用户必须为某个内核模块参数显式传递值,该如何实现呢?下面我们将对之前的内核模块进行改进,创建一个新的模块(ch5/modparams/modparams2),关键区别在于我们设置了一个名为 control_freak 的额外参数,并要求用户在插入模块时必须传递该参数。
1.1 设置新的模块参数
在代码中设置新的模块参数:
static int control_freak;
module_param(control_freak, int, 0660);
MODULE_PARM_DESC(control_freak, "Set to the project's control level [1-5]. MANDATORY");
1.2 实现“强制传递”
实现“强制传递”的方法有点取巧,即在插入模块时检查该参数的值是否为默认值(这里是 0)。如果是,则输出适当的消息并终止操作,同时还会进行简单的有效性检查,确保传递的整数在给定范围内。以下是 ch5/modparams/modparams2/modparams2.c 的初始化代码:
static int __init modparams2_init(void)
{
pr_info("%s: inserte
超级会员免费看
订阅专栏 解锁全文
27

被折叠的 条评论
为什么被折叠?



