zoukankan      html  css  js  c++  java
  • 内核模块module传参

    linux 2.6允许用户insmod的时候往内核模块里面传递参数,它主要使用module_param宏定义来实现这一功能。

    参数应用

    module_param(name, type, perm);
    module_param(参数名,参数类型,参数读写权限)

    举例:

    static int howmany=1;
    module_param(howmany, int, 0);

    在装载内核模块时,用户可以向模块传递参数,形式为:

    insmod/modprobe 模块名 参数名=参数值

    如果不传递,参数将使用模块内定义的缺省值。如果模块被内置,就无法insmod了,但bootloader可以通过在bootargs里设置

    模块名.参数名=值

    给该内置的模块传递参数。

    参数类型

    参数的类型可以是byte,short,ushort, int, uint, long, ulong, charp, bool或invbool(布尔的反)

    除此之外,内核模块还支持参数数组:

    module_param_array(数组名,数组类型,数组长,参数读写权限)

    insmod时使用逗号分割数组元素。

    参数目录

    模块被加载后,在/sys/module/目录下将出现以此模块命名的目录。

    当读写权限为0时,表示此参数不存在sysfs文件系统下对应的文件节点,如果此模块存在参数读写权限不为0的命令行参数,在此模块的目录下还将出现parameters目录,

    其中包含一系列以参数名命名的文件节点,这些文件的权限值就是传入module_param()的参数的读写权限,而文件的内容为参数的值。

    示例

    // led.c
    //********************************
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <asm/io.h>
    
    MODULE_LISENCE("GPL");
    MODULE_AUTHOR("limingth");
    MODULE_DESCRIPTION("led module driver");
    MODULE_VERSION("version1.0");
    MODULE_ALIAS("myled test");
    
    static int *vmem;
    static int led_no = 0;
    module_param(led_no, int, 0);
    
    static __init int led_init(void)
    {
        printk("led init ok!
    ");
        vmem = ioremap(0xe0200284, 4);
        printk("vmem = %p
    ");
        *vmem &=  ~(1<<led_no);
        return 0;
    }
    
    static __exit led_exit(void)
    {
        printk("led exit ok!
    ");
        *vmem = 0xf;
        
        return ;
    }
    
    module_init(led_init);
    module_exit(led_exit);
    //*************************************
    应用:
    insmod led.ko led_no=1
    rmmod led

    注:在操作系统下,所有的地址均为虚拟地址,所以物理地址需要通过ioremap或mmap函数将物理地址转换为虚拟地址后,再对地址操作。

  • 相关阅读:
    MyEclipse无法破解的某种解决方法
    SDK Manager无法打开,闪退问题
    虚拟机不能ping通宿主机问题的解决
    Ubuntu下文件编码转换
    二、vertica安装实践
    搭建Samba服务器
    vmtools安装
    一、vertica 安装注意事项
    MFC如何配置使用Win7风格的控件而不是XP风格控件
    VS静态编译
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/8196406.html
Copyright © 2011-2022 走看看