module_param 用于动态开启/关闭 驱动打印信息

Posted 阳光农场皮卡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了module_param 用于动态开启/关闭 驱动打印信息相关的知识,希望对你有一定的参考价值。

1.定义模块参数的方法:

module_param(name, type, perm);

其中,name:表示参数的名字;      type:表示参数的类型;      perm:表示参数的访问权限;

type参数设定的类型和perm的访问权限具体数值数值请参考内核定义。

 

2、可以在insmod(装载模块)的时候为参数指定值,如果没有指定则使用默认值

static int num=10;
module_param(num,int,S_IRUGO);
static int hello_init(void)
{
    printk("Hello module init./n");
    printk("num=%d/n",num);
    return 0;
}
static void   hello_exit(void)
{
    printk("Goodbye module exit./n");
}
module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION(
"a simple module"); MODULE_ALIAS("hello");

上面的num=10,则10是参数num的默认值。

保存为源文件hello.c, 编译生成hello.ko , 当我们使用insmod进行载入时, 使用

insmod hello.ko num=20

则可以 cat /sys/module/hello/parameters/num ,看到为 20

3、驱动的打印调试信息正常情况下我们并不希望看到,但是出现错误的情况下还是需要查看的,可使用以下方法:

static int num=0;
module_param(num,int,S_IRUGO);

/* 驱动运行中调用的操作 */
int fun_test()
{
    if(num)
    {
        printk("This is a test!\n");
    }
}

static int hello_init(void)
{
    printk("Hello module init./n");
    printk("num=%d/n",num);
    return 0;
}
static void   hello_exit(void)
{
    printk("Goodbye module exit./n");
}
module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("a simple module");
MODULE_ALIAS("hello");


默认运行中不会出现打印信息“This is a test”。

查看 /sys/modules/hello/parameters/num参数,默认数值是0,

echo 1 > /sys/modules/hello/parameters/num    #打开调试信息打印
echo 0 > /sys/modules/hello/parameters/num    #关闭调试信息打印


以上操作即可以实现动态关闭/打开调试信息

 

以上是关于module_param 用于动态开启/关闭 驱动打印信息的主要内容,如果未能解决你的问题,请参考以下文章

加载驱动的传参和符号导出(EXPORT_SYMBOL & module_param)

为啥 module_param_hw( ) 宏比 module_param( ) 更安全?

黑苹果 CPU 管理驱动(开启CPU变频)

module_param的内核模块参数简介

Linux之module_param()--给模块传递参数

module_param()函数