module_param传递参数

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

// 在用户态下编程可以通过main()的来传递命令行参数
// 编写一个内核模块则通过module_param()

static char *global_name= "hello world";            
static int global_count = 3;

// 要传递的参数变量名, 变量的数据类型, 访问参数的权限。
// 权限值:表示此参数在sysfs文件系统中所对应的文件节点的属性
// 当perm为0时,表示此参数在 sysfs文件系统下不存在对应的文件节点。
// 否则,模块被加载后,在/sys/module/ 目录下将出现以此模块名命名的目录,带有给定的权限
// 使用 S_IRUGO 作为参数可以被所有人读取, 但是不能改变; S_IRUGO|S_IWUSR 允许 root 来改变参数
// 注意, 如果一个参数被 sysfs 修改, 则用到的模块看到的参数值也改变了, 但是各模块不会收到任何通知 
// 应当不要使模块参数可写, 除非已经准备好检测这个改变,并且因而作出反应
   
module_param(global_count, int, S_IRUSR);    
module_param(global_name, charp, S_IRUSR);  

static int hello_init(void)      
{
	int i;
	for(i=0;i<global_count;i++)
		printk(KERN_ALERT "(%d) %s\n",i, global_name);
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_ALERT"Goodbye\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");    
root@ubuntu:/home/study/test32# dmesg | grep -iE "hello"
[28360.866843] (0) hello world
[28360.866980] (1) hello world
[28360.866985] (2) hello world
root@ubuntu:/sys/module/my_hello/parameters# ls
global_count  global_name

Guess you like

Origin blog.csdn.net/wangkai6666/article/details/121312163