为了增加驱动程序的灵活性,内核允许对驱动程序指定参数,而这些参数可在加载驱动程序模块时改变。
这些参数的值可由insmod或者modprobe在加载时指定;后者也可以从它的配置文件(/etc/modprobe.conf)读取参数的值。这两个命令可在命令行里接受几种参数类型的赋值。 我们可以用“module_param(参数名,参数类型,参数读/写权限)”为模块定义参数。为了演示这种功能,我们对本章开始的“hello world”模块(命名为hello_ext)做了如代码清单1.5所示的改进。 我们增加2个参数:一个整型值,称为howmany,一个字符串称为whom。 在装载这个增强的模块时,将向whom问候howmany次。这样我们可以用下面的命令来装载该模块: insmod hello_ext.ko howmany=5 whom=“Students” 代码清单1.4 hello_ext #include <linux/init.h>#include <linux/module.h>MODULE_LICENSE(“Dual BSD/GPL”); static char *whom =“world”;static int howmany = 1; static int hello_init(void){ int i; for(i=0;i<howmany;i++) { printk(KERN_ALERT“Hello %s\n”,whom); } return 0;}static void hello_exit(void){ printk(KERN_ALERT“Hello world exit\n”);}module_init(hello_init);module_exit(hello_exit);module_param(howmany, int, S_IRUGO);module_param(whom, charp, S_IRUGO);EXPORT_SYMBOL(howmany);EXPORT_SYMBOL(whom); 内核支持的模块参数类型包括byte、short、ushort、int、uint、long、ulong、charp(字符指针)、bool或invbool(布尔的反),以‘u’开头的为无符号值。 除此之外,模块也可以拥有参数数组,形式为“module_param_array(数组名,数组类型,数组长,参数读/写权限)”。运行insmod或modprobe命令时,应使用逗号分隔输入的数组元素。 转自嵌入式学习网!
原文地址:http://www./viewnews-8458 |
|