module_param

1.module_param()函数的主要作用就是从命令行传递参数。

  正如用户编程从main函数通过argc/argv传递。而内核编程要传递参数给模块,首先将获取参数值的变量声明为全局变量,然后使用宏module_param()(在头文件linux/module.h).运行时,=如用户态一样直接跟在命令之后 insmod test.ko count=3;为使代码清晰,变量的声明和宏都应该放在模块代码的开始部分。

  module_param定义如下:

  #define module_param(name, type, per)

  函数有3个参数: 要传递的参数变量名, 变量的数据类型, 以及访问参数的权限。

  2.下面具体说说erm参数的作用是什么?

     最后的 module_param 字段是一个权限值,表示此参数在sysfs文件系统中所对应的文件节点的属性。你应当使用  <linux/stat.h> 中定义的值. 这个值控制谁可以存取这些模块参数在 sysfs 中的表示.当perm为0时,表示此参数不存在sysfs文件系统下对应的文件节点。 否则, 模块被加载后,在/sys/module/ 目录下将出现以此模块名命名的目录, 带有 给定的权限.。

权限在include/linux/stat.h中有定义

比如:

#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

3.模块参数支持多个参数类型

int  long  short  uint  ulong ushort  bool  invbool  charp(字符)

4.举例

#include <linux/init.h>
  
#include <linux/module.h>
  
MODULE_LICENSE("GPL"); 
  
static int count = 1; 
  
module_param(count,int,S_IRUSR); 
  
static int __init hello_init(void) 
  
{
    int i;
  
    for(i=0;i<count;i++)
  
    printk("HELLO\n ");
  
    return 0;
}
  
static void __exit hello_exit(void) 
  
{
    printk(KERN_ALERT"Goodbye");
}
  
module_init(hello_init);
  
module_exit(hello_exit);
编译运行:
lwp@lwp-linux:~/Desktop$ make
 
lwp@lwp-linux:~/Desktop$ sudo insmod 11.ko count=5
 
lwp@lwp-linux:~/Desktop$ dmesg
 
[15162.849220] HELLO
 
[15165.019382] HELLO
 
[15165.019387] HELLO
 
[15165.019389] HELLO
 
[15165.019390] HELLO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值