历史上的今天
今天是:2024年12月31日(星期二)
2021年12月31日 | 4412 内核模块传参数
2021-12-31 来源:eefocus
单个参数
应用程序中可以在main的参数传值
头文件在"include/linux/moduleparam.h"
内核模块可以通过module_param来传单个参数
module_param(name, type, perm)
name:模块参数的名称
type:模块参数的数据类型(支持int long short uint ulong ushort 类型)
perm:模块参数的访问权限(S_IRUSR参数表示所有文件所有者可读)
多个参数
传递多个参数module_param_array(name, type, nump, perm)
name:模块参数名称
type:模块参数的数据类型(支持int long short uint ulong ushort类型)
nump:保存参数个数的地址
perm:模块参数的访问权限(S_IRUSR参数表示所有文件所有者可读)
内核模块传参数
参数perm表示此参数在sysfs文件系统中所对应的文件结点的属性,其权限在include/linux/stat.h中有定义
变量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表示文件所有者可执行
接下来三位表示文件所有者同组成员的权限,再下来三位为不同组用户权限
将Makefile命令clean完善,执行clean命令可以将所有无关的文件删除
在02_DriverModule_01例程的基础上编写简单模块module_param,测试模块传参数,并将传递的参数打印出来。
insmod /mnt/udisk/module_param.ko module_arg1=10 module_arg2=20 int_array=11,12,13,14,15,16,17,18
cat /sys/module/module_param/parameters/xxx 可以查询参数
#include
#include /* define module_param module_param_array header file */ #include /* define perm's head file*/ #include MODULE_LICENSE("Dual BSD/GPL"); MODULE_AUTHOR("TOPEET"); static int module_arg1, module_arg2; static int int_array[50]; static int int_num; module_param(module_arg1, int, S_IRUSR); module_param(module_arg2, int, S_IRUSR); module_param_array(int_array, int, &int_num, S_IRUSR); static int hello_init(void) { int i; printk(KERN_EMERG "module_arg1 is %d!n", module_arg1); printk(KERN_EMERG "module_arg2 is %d!n", module_arg2); if(int_num > 0) { for(i=0;i } } printk(KERN_EMERG "Hello World enter!n"); return 0; } static void hello_exit(void) { printk(KERN_EMERG "HELLO World exit!n"); } module_init(hello_init); module_exit(hello_exit); 测试效果: [root@iTOP-4412]# insmod module_param.ko module_arg1=10 module_arg2=20 int_array =11,12,13,14,15,16,17,18 [15894.520387] module_arg1 is 10! [15894.522007] module_arg2 is 20! [15894.525113] int_array[0] is 11! [15894.528173] int_array[1] is 12! [15894.531350] int_array[2] is 13! [15894.534412] int_array[3] is 14! [15894.537579] int_array[4] is 15! [15894.540702] int_array[5] is 16! [15894.543786] int_array[6] is 17! [15894.546949] int_array[7] is 18! [15894.550068] Hello World enter! [root@iTOP-4412]# cat /sys/module/mo module_param/ mousedev/ [root@iTOP-4412]# cat /sys/module/module_param/parameters/ int_array module_arg1 module_arg2 [root@iTOP-4412]# cat /sys/module/module_param/parameters/module_arg1 10 [root@iTOP-4412]# cat /sys/module/module_param/parameters/* 11,12,13,14,15,16,17,18 10 20
上一篇:4412 字符类设备的设备号
下一篇:4412 GPIO初始化
史海拾趣
|
..\\main.c:28: ..\\uemf.h: No such file or directory ..\\main.c:29: ..\\wsIntrn.h: No such file or directory 以上两个头文件均已经加入,但还是出现错误! dependency generation failed: ccppc: No input files 提示这个 怎么弄tffs ...… 查看全部问答> |
|
通过RS232,TCP/IP实现PC与PDA的文件传输 现在一个特别奇怪的问题是,在Mobile上正常 在CE上,程序运行来,没有点传输也正常,等开始发送文件时,系统还是正常,等文件传输完时,PDA机器就会变得很卡了 如果在传时去点,就不会卡,反而是传完,就变得很卡, ...… 查看全部问答> |
|
请问诺基亚5200通过蓝牙驱动IVT BlueSoleil与电脑连接,并打开蓝牙串行端口服务。然后在PC机上的超级终端里面连接到此手机蓝牙串口,并可以发送AT命令,但是奇怪的是,发AT可以返回OK,也可以发一些查询型号的AT命令,都有返回。但是 ...… 查看全部问答> |
|
为什么一定要集成PHY呢?难道嵌入式系统就一定要集成PHY?集成PHY有其好处亦有其坏处,好处无非就是total cost,集成度等方面有优势,坏处其实也不少:1.无法满足某些安规标准,有些场合是需要光耦隔离的,这个时候就不能用了;2.增加芯 ...… 查看全部问答> |
|
LED 散热设计原理及结温等相关技术参数的计算公式 [ 本帖最后由 qwqwqw2088 于 2012-7-23 09:27 编辑 ]… 查看全部问答> |




