我是
靠谱客的博主
愤怒飞鸟,最近开发中收集的这篇文章主要介绍
怎样使用module_param()来手动传递变量,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
对于如何向模块传递参数,Linux kernel 提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。
使用下面的宏时需要包含头文件<linux/moduleparam.h>。
module_param() 和 module_param_array() 的作用就是让那些全局变量对 insmod 可见,使模块装载时可重新赋值。
module_param_array() 宏的第三个参数用来记录用户 insmod 时提供的给这个数组的元素个数,NULL 表示不关心用户提供的个数
module_param() 和 module_param_array() 最后一个参数权限值不能包含让普通用户也有写权限,否则编译报错。这点可参考 linux/moduleparam.h 中 __module_param_call() 宏的定义。
字符串数组中的字符串似乎不能包含逗号,否则一个字符串会被解析成两个
一个测试用例:parm_hello.c
#include <linux/module.h> #include <linux/moduleparam.h> #include <linux/kernel.h> #define MAX_ARRAY 6 static int int_var = 0; static const char *str_var = "default"; static int int_array[6]; int narr; module_param(int_var, int, 0644); MODULE_PARM_DESC(int_var, "A integer variable"); module_param(str_var, charp, 0644); MODULE_PARM_DESC(str_var, "A string variable"); module_param_array(int_array, int, &narr, 0644); MODULE_PARM_DESC(int_array, "A integer array"); static int __init hello_init(void) { int i; printk(KERN_ALERT "Hello, my LKM.n"); printk(KERN_ALERT "int_var %d.n", int_var); printk(KERN_ALERT "str_var %s.n", str_var); for(i = 0; i < narr; i ++){ printk("int_array[%d] = %dn", i, int_array[i]); } return 0; } static void __exit hello_exit(void) { printk(KERN_ALERT "Bye, my LKM.n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("ydzhang"); MODULE_DEION("This module is a example."); |
测试:insmod parm_hello.ko int_var=100 str_var=hello int_array=100,200
最后
以上就是愤怒飞鸟为你收集整理的怎样使用module_param()来手动传递变量的全部内容,希望文章能够帮你解决怎样使用module_param()来手动传递变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复