lsmod显示模块由-2使用

时间:2014-05-18 16:03:42

标签: linux linux-device-driver kernel-module

我正在尝试使用以下代码传递命令行参数

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/moduleparam.h>

static int nilvar=0;
static int nilvar2=0;
int rollcalls[5];// = {0};
char classname[10];// = "math";

module_param_named (var,nilvar2,int,0644);
module_param (nilvar,int,0644);
module_param_array_named(present,rollcalls,int,5,0644);
module_param_string(subject,classname,10,0644);

int init_module(void)
{
    printk(KERN_INFO"1) nilvar = %d\n 2) nilvar2 = %d",nilvar,nilvar2);
    printk(KERN_INFO/*NOTICE*/"ROLLCALLS = %d ,%d ,%d ,%d",rollcalls[0],rollcalls[1],rollcalls[2],rollcalls[3]);
    printk(KERN_INFO/*DEBUG*/"classname = %s",classname);
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Bye....\n");
}

MODULE_LICENSE("GPL");

在制作之后,我通过

传递我的论点
insmod module1.ko var=5 nilvar=6 present=1 2 3 4 subject=physics

我不确切知道发生了什么,但现在lsmod显示-2使用的模块。 (实际上没有模块依赖于这个模块)

所以我错了?如果我们想将所有这些变量修改为结构元素,那么如何使用module_param()宏呢?

1 个答案:

答案 0 :(得分:1)

@ user3452214,而不是module_param_array_named(present, rollcalls, int, **5**, 0644);使用module_param_array_named(present, rollcalls, int, **&count**, 0644);添加了一个变量,即 static unsigned int count ,它保留了写入数组的数字的计数。我们需要按照moduleparam.h中的说明传递指针,因此不能传递此参数的数值。它工作正常!!!希望它能解决你的问题。

/**
 * module_param_array_named - renamed parameter which is an array of some type
 * @name: a valid C identifier which is the parameter name
 * @array: the name of the array variable
 * @type: the type, as per module_param()
 * @nump: optional pointer filled in with the number written
 * @perm: visibility in sysfs
 *
 * This exposes a different name than the actual variable name.  See
 * module_param_named() for why this might be necessary.
 */
#define module_param_array_named(name, array, type, nump, perm)