• 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!
    ");
        }
    }
    
    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    #关闭调试信息打印


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

  • 相关阅读:
    AdvComboBox
    带有可选选项的输入文本框(组合框)
    使用JavaScript为整个网站创建通用的Twitter按钮
    高速绘图控件
    Outlook样式分组列表控件
    CComboBox的禁用项目
    一个自定义的WPF滑块按钮
    23个设计模式
    MVC执行流程
    SQL注入面试
  • 原文地址:https://www.cnblogs.com/FarmPick/p/9003612.html
Copyright © 2020-2023  润新知