设备驱动开发实验教程(8)_驱动模块传参数

        加载模块的时候可以通过 insmod 命令传参数,掌握了这个知识点之后调试起来会方便很多(类似的,在应用程序中,可以通过 main 函数向其中传参数)。

        在头文件“include/linux/moduleparam.h”中包含了向模块传参数的函数。这个功能是集成的,在任何 linux 系统之中都可以使用。


1、添加头文件;

 

2、调用函数 module_param 和 module_param_array 接收参数;

 

3、添加代码在初始化的时候将数据打印出去,如下图所示。

 

        完整的程序module_param.c如下。

        以下程序实现的功能是,以模块的方式加载驱动时,可以传入参数到底层驱动程序(例如,加载驱动 module_param.ko时使用命令“insmod /mnt/udisk/module_param.ko module_arg1=10module_arg2=20 int_array=11,12,13,14,15,16,17,18”传入参数)。

#include <linux/init.h>
/*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/
#include <linux/module.h>
/*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/

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


MODULE_LICENSE("Dual BSD/GPL");
/*声明是开源的,没有内核版本限制*/
MODULE_AUTHOR("iTOPEET_dz");
/*声明作者*/

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);
	
	for(i=0;i<int_num;i++){
		printk(KERN_EMERG "int_array[%d] is %d!\n",i,int_array[i]);
	}
		
	printk(KERN_EMERG "Hello World enter!\n");
	/*打印信息,KERN_EMERG表示紧急信息*/
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_EMERG "Hello world exit!\n");
}


module_init(hello_init);
/*初始化函数*/
module_exit(hello_exit);
/*卸载函数*/

 

        编译成模块。

 

        将上图中的文件 module_param.ko 拷贝到 U 盘。启动开发板,将 U 盘插入开发板,使用命令“mount /dev/sda1 /mnt/udisk/”加载 U盘。
        使用命令“insmod /mnt/udisk/module_param.ko module_arg1=10module_arg2=20 int_array=11,12,13,14,15,16,17,18”加载驱动 module_param.ko,如下图所示。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值