Linux:insmod加载驱动模块传递参数方法 |
您所在的位置:网站首页 › linux驱动加载方式 › Linux:insmod加载驱动模块传递参数方法 |
今天在移植电机驱动的过程中,发现编译脚本在加载该驱动模块的时候,却带的有参数,当时就有点纳闷了。然后经过一段时间的各种查找,终于知道加载驱动模块时传递参数的奥妙; 1、应用层在应用程序中,我们通过命令行给main函数传递参数,而在加载驱动模块时,我们可以使用module_param()来传递参数; 例如在如下程序段中 int main(int argc,char *argv[ ]) { printf("argv[0] %s\n",argv[0]); printf("argv[1] %s\n",argv[1]); printf("argc is %d\n",argc); return 0; }当我们编译运行时; ./a.out aaa那么屏幕上将打印 ./a.out aaa 2以上打印信息就是我们传递给main函数的参数; argc为参数的个数,./a.out为第一个参数,aaa为第二个参数; 以上就是在应用程序中通过命令行传递参数的方法; 2、驱动层那么,我们在加载驱动模块的时候也可以通过上述方式传递参数; module_param()为一个宏,表示向当前模块传递参数; 该宏定义在 中; 使用说明: 原型:moudle_param(name, type, perm); 功能:制定模块参数,用于在加载模块时给相关变量传递参数; 参数说明: name:将要传递参数的变量名称; type:传递参数的数据类型; perm:传递参数的访问权限; 其中参数type可以使用以下任意一种类型: bool:布尔型 inbool:布尔反值 charp:字符指针 short:短整型 int:整型 ushort:无符号短整型 int:整型 uint:无符号整型 long:长整型 ulong:无符号长整型 参数perm表示此参数在sysfs文件系统中所对应的文件节点的属性,其权限在include/linux/stat.h中有定义。 它的取值可以用宏定义,也可以有数字法表示。 宏定义有: #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 数字法:1表示执行权限,2表示写入权限,4表示读取权限。 一般用8进制表示即可,如0664。从左向右看,第一位的0表示八进制的意思,第二位的6表示文件所有者的权限为可读可写,第三位的6表示文件同组用户的权限为可读可写,第四位的4表示文件其他用户的权限为只读。 例如: int irq; char*pstr; module_param(irq,int,0664); module_param(pstr,charp,0000); 内核模块参数数组简介编辑: module_param_array(name, type, nump, perm);参数: name:模块参数的名称 type: 模块参数的数据类型 nump: 数组元素个数指针 perm: 模块参数的访问权限 例如: static int fish[10]; static int nr_fish; module_param_array( fish, int, &nr_fish, 0664);nr_fish:保存最终传递数组元素个数,不能大于10个 测试模块编辑 源程序hello.c内容如下: #include #include #include MODULE_LICENSE("Dual BSD/GPL"); static char *who= "world"; static int times = 1; module_param(times, int, S_IRUSR); module_param(who, charp, S_IRUSR); static int hello_init(void) { int i; for(i=0;i |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |