设备驱动(二)

模块传参
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/stat.h>

#define DRIVER_AUTHOR "Foobar"
#define DRIVER_DESC   "A sample driver"

MODULE_LICENSE ("GPL");
MODULE_AUTHOR (DRIVER_AUTHOR);
MODULE_DESCRIPTION (DRIVER_DESC);
MODULE_SUPPORTED_DEVICE ("TestDevice");

static short int myshort = 1;
static int myint = 420;
static long int mylong = 9999;
static char *mystring = "blah";
static int array[2]= {-1, -1};
static int arr_argc = 0;

module_param (myshort, short, 0400);
MODULE_PARM_DESC (myshort, "A short integer");

module_param (myint, int, 0400);
MODULE_PARM_DESC (myint, "An integer");

module_param (mylong, long, 0000);
MODULE_PARM_DESC (mylong, "A long integer");

module_param (mystring, charp, 0000);
MODULE_PARM_DESC (mystring, "A character string");

module_param_array (array, int, &arr_argc, 0000);
//module_param_array (array, int, arr_argc, 0000); //for kernel<2.6.10
MODULE_PARM_DESC (array, "An array of integers");

static int __init hello_2_init (void)
{
     int i;

     printk (KERN_INFO "myshort is a short integer: %hd\n", myshort);
     printk (KERN_INFO "myint is an integer: %d\n", myint);
     printk (KERN_INFO "mylong is a long integer: %ld\n", mylong);
     printk (KERN_INFO "mystring is a string: %s\n\n", mystring);

     for (i=0; i<arr_argc; i++)
          printk (KERN_INFO "array[%d] = %d\n",i, array[i]);
     printk (KERN_INFO "Got %d arguments in array\n", arr_argc);

     return 0;
}

static void __exit hello_2_exit (void)
{
     printk (KERN_INFO "hello driver cleaned up\n");
}

module_init (hello_2_init);
module_exit (hello_2_exit);
  1.  定义变量
    1. 变量必须初始化,并使用static修饰
  2. 指定变量为模块参数
    1. module_param(变量名,变量类型,权限值);//如果传递字符串char *, 使用charp表示char *
    2. module_param_array(数组名, 数组元素类型, 数组大小(使用指针), 权限值);
  3. 为模块参数添加说明
    1. MODULE_PARM_DESC(变量名, 描述信息)
使用
     insmod hello.ko 变量名=变量值 [,变量名=变量值 ]...
     insmod hello.ko 数组名=元素1 [, 元素2]...
     模块加载后, 在/sys/module下有对应的模块目录,模块目录下有有关模块的信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值