您的位置:首页 > 运维架构 > Linux

15 linux驱动模块的参数

2017-06-06 11:49 162 查看
模块参数是用于在加载驱动模块时,指定模块里面的特定变量的具体值.

实现方法:

1).  #include <linux/moduleparam.h>

2). 在驱动源码里定义变量
static int num = 0; //当加载模块不指定num的值时则为0

3). 声明指定的变量为驱动模块参数
module_param(变量名, 类型, 权限);
//类型可有: byte, int, uint, short, ushort, long, ulong, bool, charp
//权限:    其它用户所占的权限里不能有写的权限

4). 加载驱动模块时指定模块参数的具体值:
insmod test.ko 变量名1=值1  变量名2=值2


////////////////////////////////////////////

根据上例改成在加载驱动模块时通过模块参数决定led灯初始时的状态.

test.c

#include <linux/init.h>
#include <linux/module.h>
#include <mach/gpio.h>  // 芯片io口的宏定义
#include <linux/gpio.h>  // io口的调用函数
#include <linux/moduleparam.h>

static int on = 1;
module_param(on, int, 0644);  //声明模块参数

#define LED_GPIO  GPIOA(15) //PA15
static int __init test_init(void)
{
int ret;

ret = gpio_request(LED_GPIO, "myled"); //如请求失败,则表示此io口已被其它驱动使用
if (ret < 0)
return ret;

gpio_direction_output(LED_GPIO, on); //根据外面的参数值来决定led灯的亮灭
return 0;
}

static void __exit test_exit(void)
{
gpio_set_value(LED_GPIO, 0);

gpio_free(LED_GPIO);
}

module_init(test_init);
module_exit(test_exit);

MODULE_LICENSE("GPL");


编译成ko文件后,可用modinfo查看到模块参数的信息:

filename:       /disk3/h3fs/kernel_codes/01hello/04module_params/test.ko
license:        GPL
depends:
vermagic:       3.4.112 SMP preempt mod_unload ARMv7 p2v8
parm:           on:int


加载驱动模块时:

insmod test.ko on=1  或者 insmod test.ko on=0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux驱动