15 linux驱动模块的参数

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

实现方法:

   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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值