16 驱动模块参数(支持外部输入参数)

驱动模块参数(支持外部输入参数)


模块参数是用于在加载驱动模块时,指定模块里面的特定变量的具体值。


实现方法步骤:

1.包含头文件:
    #include <linux/moduleparam.h>

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

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

4.写完程序后,在加载驱动模块时可指定模块参数的具体值:
    insmod xxx.ko 变量名1=值1  变量名2=值2

加载驱动模块时通过模块参数决定led灯初始时的状态(xxx.c):

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

#define LED_GPIO GPIOA(15) //PA15

static int on = 1;//默认为亮,可以通过外面传参来改变on的值,从而决定LED的亮和灭
module_param(on, int, 0644);//声明模块参数

static int __init test_init(void)
{
    int ret;

    ret = gpio_request(LED_GPIO, "myled");//每个io只能被请求一次,可防止多个驱动来控制同一个IO口;如请求失败,则表示此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);//LED灭

    gpio_free(LED_GPIO);//释放已请求的io口
}

module_init(test_init);
module_exit(test_exit);

MODULE_LICENSE("GPL");

Makefile文件:

obj-m += xxx.o

KSRC := /目录路径/orangepi_sdk/source/linux-3.4.112/
export ARCH := arm
export CROSS_COMPILE := arm-linux-gnueabihf-

all : 
    make -C $(KSRC) modules M=`pwd`

.PHONY : clean
clean : 
    make -C $(KSRC) modules clean M=`pwd`

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

modinfo xxx.ko

加载驱动模块:

insmod xxx.ko on=1  或者  insmod xxx.ko on=0  或者  insmod xxx.ko
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值