ARM驱动学习之7 驱动模块传参数

16 篇文章 0 订阅

                              ARM驱动学习之7 驱动模块传参数

1.02_DriverModule_01例程的基础上编写简单模块module_param
Makefile 文件名字修改为module_param 
clean部分:
    rm -rf *.mod.c *.o *.order *.ko *.mod.o *.symvers

2.修改module_param.c
(1):添加头文件
//定义module_param module_param_array的头文件
#include <linux/moduleparam.h>
//定义module_param module_param_array的参数
#include <linux/stat.h>

(2)函数定义:
static int module_arg1,module_arg2;
static int int_array[50];
static int int_num;

module_param(module_arg1,int,S_IRUSR);

– module_arg1:模块参数的名称
– int: 模块参数的数据类型(支持int long short uint ulong ushort类
型)
– S_IRUSR: 模块参数的访问权限(S_IRUSR参数表示所有文件所有者
可读)

module_param(module_arg2,int,S_IRUSR);
module_param_array(int_array,int,&int_num,S_IRUSR);

– int_array:模块参数的名称//为数组类型
– int: 模块参数的数据类型(支持int long short uint ulong ushort类
型)
– int_num:保存参数个数的地址
– S_IRUSR: 模块参数的访问权限(S_IRUSR参数表示所有文件所有者
可读)

(3)在hello_init中加入如下:
int i;
printk(KERN_EMERG "module_arg1 is %d,module_arg1 is %d \n",module_arg1);
printk(KERN_EMERG "module_arg2 is %d,module_arg1 is %d \n",module_arg2);

for(i = 0;i < int_num;i ++){
    printk(KERN_EMERG "int_array[%d] is %d \n",i,int_array[i]);

}


4.make clean 看是否清空了其他无用文件
5.make编译文件

测试模块传参数,并将传递的参数打印出来
– 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 Tab显示可以查询参数














源码:

#include <linux/moduleparam.h>
/*定义module_param module_param_array中perm的头文件*/
#include <linux/stat.h>

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("JT");



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;
	static int module_arg1,module_arg2;
	static int int_array[50];
	static int int_num;
	
	printk(KERN_EMERG "module_arg1 is %d,module_arg1 is %d \n",module_arg1);
	printk(KERN_EMERG "module_arg2 is %d,module_arg1 is %d \n",module_arg2);

	for(i = 0;i < int_num;i ++){
		printk(KERN_EMERG "int_array[%d] is %d \n",i,int_array[i]);

	}
	printk(KERN_EMERG "HELLO JT ENTER\r\n");
	return 0;
	
	
}

static void hello_exit(void)
{
	printk(KERN_EMERG "HELLO JT exit\r\n");
	
	
}

module_init(hello_init);
module_exit(hello_exit);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值