驱动模块传参数

目的:加载模块时,可以向模块传参数

头文件:include/linux/moduleparam.h

(1)传单个参数:module_param(name, type, perm)
* name // 模块参数的名称
* type // 模块参数的数据类型(支持int long short uint ulong ushort类型)
* perm // 模块参数的访问权限(在include/linux/stat.h中定义)

(2)传多个参数: #define module_param_array(name, type, nump, perm)
* name // 模块参数的名称
* type // 模块参数的数据类型(支持int long short uint ulong ushort类型)
* nump // 保存参数个数的地址
* perm // 模块参数的访问权限(在include/linux/stat.h中定义)

perm参数详解:
#define S_IRWXU 00700    // 文件所有者可读写执行
#define S_IRUSR 00400    // 文件所有者可读
#define S_IWUSR 00200    // 文件所有者可写
#define S_IXUSR 00100    // 文件所有者可执行

#define S_IRWXG 00070
#define S_IRGRP 00040    // 文件所有者同组的用户可读
#define S_IWGRP 00020
#define S_IXGRP 00010

#define S_IRWXO 00007
#define S_IROTH 00004    // 与文件所有者不同组的用户可读
#define S_IWOTH 00002
#define S_IXOTH 00001
将数字最后三位转化为二进制:xxx xxx xxx,高位往低位依次看,第一位为1表示文件所有者可读,第二位为1表示文件所有者可写,第三位为1表示文件所有者可执行;接下来三位表示文件所有者同组成员的权限;再下来三位为不同组用户权限

相关代码:

#include <linux/init.h>
#include <linux/module.h>

#include <linux/moduleparam.h>

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("LSQ");

static int module_arg1,module_arg2;
static int int_array[50];
static int int_num;

module_param(module_arg1, int, S_IRUSR);

module_param(module_arg2, int, S_IRUSR);

module_param_array(int_array, int, &int_num, S_IRUSR);


static int hello_init(void)
{
    int i;
    printk(KERN_EMERG "module_arg1 is %d\n",module_arg1);
    printk(KERN_EMERG "module_arg2 is %d\n",module_arg2);

    for(i=0; i < int_num; i++)
    {
        printk(KERN_EMERG "int_array[%d] is %d\n",
            i, int_array[i]);
    }

    printk(KERN_EMERG "HELLO WORLD enter!\n");

    return 0;
}

static void hello_exit(void)
{
    printk(KERN_EMERG "HELLO WORLD exit!\n");
}

module_init(hello_init);
module_exit(hello_exit);

模块测试:
insmod hello.ko module_arg1=0 module_arg2=20 int_arry=1,2,3,4,5,6,7,8,9
cat /sys/module/hello/parameters/xxx 可以查询参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值