内核模块参数

模块参数允许用户在加载模块时通过命令行指定参数值,在模块的加载过程中,加载程序会得到命令行参数,并转换为相应类型的值,然后赋值给对应的变量,这个过程发生在调用模块初始化函数之前。内核支持的参数类型有:bool、invbool(反转值bool类型)、charp(字符串指针)、short、int、long、ushort、uint、ulong。这些类型又可以复合成对应的数组类型。

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

static int baudrate = 9600;
static int port[4] = {0,1,2,3};
static char *name = "vser";

module_param(baudrate, int , S_IRUGO);
module_param_array(port, int , NULL ,S_IRUGO);
module_param(name , charp , S_IRUGO);

static int __init vser_init(void)
{
    int i;

    printk("vser_init\n");
    printk("baudrate: %d\n", baudrate);
    printk("port: ");
    for(i=0; i < ARRAY_SIZE(port); i++)
        printk("%d ",port[i]);
    printk("\n");
    printk("name: %s\n",name);

    return 0;
}

static void __exit vser_exit(void)
{
    printk("vser_exit\n");
}

module_init(vser_init);
module_exit(vser_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("huang yun biao < huangyb@3102972794@qq.com.cn>");
MODULE_ALIAS("virtual-serial");

module_param(name, type, perm)
module_param_array(name, type, nump, perm)

name:变量的名字
type:变量或数组元素的类型
nump:数组元素个数的指针,可选
perm:文件系统中对应文件的权限属性,所有用户组可读权限:S_IRUGO

编译、安装模块后,在加载模块时,如果不指定模块参数的值,那么使用的命令和内核打印的信息如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210131163013745.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h5YmN0,size_16,color_FFFFFF,t_70)
可见打印的值都是代码中的默认值,如果需要制定模块参数的值,可以使用下面的命令
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210131163143186.png)
通过命令行参数的形式,对默认值进行修改
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021013116324037.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h5YmN0,size_16,color_FFFFFF,t_70)
参考sys文件系统下的内容,可以发现和模块参数对应的文件及相对应的权限
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210131163744798.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210131163836804.png)


虽然在代码中增加模块参数的写权限可以使用户通过sysfs文件系统来修改模块参数的值,但并不推荐这样做。因为通过这种方式对模块参数进行的修改模块本身是一无所知的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值