linux 内核模块传参
2018-03-18 23:14
253 查看
头文件在“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
– #defineS_IRUSR 00400文件所有者可读
– #defineS_IWUSR00200文件所有者可写
– #defineS_IXUSR 00100文件所有者可执行
– #defineS_IRGRP00040与文件所有者同组的用户可读
– #defineS_IWGRP00020
– #defineS_IXGRP 00010
– #defineS_IROTH 00004与文件所有者不同组的用户可读
– #defineS_IWOTH00002
– #defineS_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 <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("FXQ");
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 "HELLO WORLD enter!\n");
printk("param1 is %d \r\n",module_arg1);
printk("param12 is %d \r\n",module_arg2);
for(i=0;i<int_num;i++)
{
printk("int_array[%d] is %d \r\n",i,int_array[i]);
}
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG "HELLO WORLD exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
• 内核模块可以通过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
– #defineS_IRUSR 00400文件所有者可读
– #defineS_IWUSR00200文件所有者可写
– #defineS_IXUSR 00100文件所有者可执行
– #defineS_IRGRP00040与文件所有者同组的用户可读
– #defineS_IWGRP00020
– #defineS_IXGRP 00010
– #defineS_IROTH 00004与文件所有者不同组的用户可读
– #defineS_IWOTH00002
– #defineS_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 <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("FXQ");
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 "HELLO WORLD enter!\n");
printk("param1 is %d \r\n",module_arg1);
printk("param12 is %d \r\n",module_arg2);
for(i=0;i<int_num;i++)
{
printk("int_array[%d] is %d \r\n",i,int_array[i]);
}
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG "HELLO WORLD exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
相关文章推荐
- linux内核可装载模块(lkm)传参机制
- Linux 驱动开发之内核模块开发 (三)—— 模块传参
- Linux 驱动开发之内核模块开发 (三)—— 模块传参
- Linux 4.0+内核对硬件交换模块的支持(HW Switch Offload)
- Linux最简单内核模块编写
- linux下内核模块的加载与卸载
- Linux学习记录--内核|内核模块编译 推荐
- linux添加可加载内核模块(LKM入门)
- 在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink
- Linux内核编译以及perfctr模块安装
- Linux学习笔记 - 内核模块
- 使用kgdb调试linux内核及内核模块
- 在Linux启动时自动加载内核模块
- 记linux内核处理bootargs到内核并加载模块时传入参数(module_param_named()等)
- Linux内核编译,模块尺寸变大的解决办法
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- (转载)使用kgdb调试linux内核及内核模块
- linux 内核模块之间通信
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- Linux 2.6内核下编译可以加载的内核模块