module_param(name, type, perm)
name:
模块參数名称(就像一个变量名一样)
type:
参数类型(同样类似于变量类型),有byte(unsigned char), short, ushort, int, uint, long, ulong, charp(相当于char *,不超过1024字节的字符串), bool, invbool(反bool)
perm:
权限,有:
#define S_IRUSR 00400 文件所有者可读
#define S_IWUSR 00200 文件所有者可写
#define S_IXUSR 00100 文件所有者可执行
#define S_IRGRP 00040 与文件所有者同组的用户可读
#define S_IWGRP 00020
#define S_IXGRP 00010
#define S_IROTH 00004 与文件所有者不同组的用户可读
#define S_IWOTH 00002
#define S_IXOTH 00001
将数字最后三位转化为二进制:xxx xxx xxx,高位往低位依次看,第一位为1表示文件所有者可读,第二位为1表示文件所有者可写,第三位为1表示文件所有者可执行;接下来三位表示文件所有者同组成员的权限;再下来三位为不同组用戶权限.
00400 ==> 400 ==> 100 000 000
module_param_array(name, type, num, perm)
name, type, perm同module_param
num:
num为整型指针,保存元素个数
module_param和module_param_array使用举例:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/moduleparam.h>
#define SIZE 10
static int int_param;
static char *string_param;
static int array_param[SIZE], num;
module_param(int_param, int, S_IRUSR);
module_param(string_param, charp, S_IRUSR);
module_param_array(array_param, int, &num, S_IRUSR);
static int __init hello_init(void){
int i;
printk("<3>int_param: ");
printk("%d", int_param);
printk("/n");
printk("string_param: ");
printk(string_param);
printk("/n");
printk("array_param: ");
printk("%d", array_param[0]);
for (i = 1; i < num; i++) {
printk(",");
printk("%d", array_param[i]);
}
printk("/n");
return 0;
}
static void __exit hello_exit(void){
printk("<3>Bye./n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");