09_驱动模块传参数

驱动模块传参数

1.什么是驱动传参

​ 驱动传参就是传递参数给我们的驱动。

举例:

​ insmod beep.ko a=1

2.驱动传参数有什么作用呢?

​ (1)设置驱动的相关参数,比如设置缓冲区的大小

​ (2)设置安全校验,防止我们写的驱动被人盗用

3.怎么给驱动传参数?

传递普通的参数, 比如 char int 类型, 使用如下函数:

image-20240422165117527

部分常用参数权限解释如下:

image-20240422165129798

image-20240422165140868

其它的可以使用下面的方法来判断:
可以将数字最后三位转化为二进制:xxx xxx xxx,高位往低位依次看,第一位为 1 表示文件所有者可读,第二位为 1 表示文件所有者可写,第三位为 1 表示文件所有者可执行;接下来三位表示文件所有者同组成员的权限;再下来三位为不同组用户权限。

示例

parameter.c

#include<linux/init.h> //包含宏定义的头文件
#include<linux/module.h> //包含初始化加载模块的头文件

static int a;

/* 驱动传普通参数 */
module_param(a, int, S_IRUSR); //文件所有者可读

static int hello_init(void)
{
    /* 内核打印函数不能用printf,因为内核没有办法使用C语言库 */
    printk("a = %d\n", a);
    return 0;
}

static void hello_exit(void)
{
    printk("byby\n"); //内核模块卸载的时候打印"byb byb
    printk("a = %d\n", a);
}

module_init(hello_init); //驱动模块的入口
module_exit(hello_exit); //驱动模块的出口

MODULE_LICENSE("GPL"); //声明模块拥有开源许可证



Makefile

obj-m +=parameter.o
KDIR:=/home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga 
PWD?=$(shell pwd)

all:
	make -C $(KDIR) M=$(PWD) modules

在开发板上安装驱动

image-20240422170058027

我们进入到/sys/module/parameter/目录下, 查看变量 a 的读写权限, 如下图所示:

image-20240422170401345

传递数组使用以下函数:

image-20240422165231561

注意参数nump要传地址,比如&count

示例

parameter.c

#include<linux/init.h> //包含宏定义的头文件
#include<linux/module.h> //包含初始化加载模块的头文件

static int b[5];
static int count;

/* 驱动传数组参数 */
module_param_array(b, int, &count, S_IRUSR); //文件所有者可读

static int hello_init(void)
{
    int i;
    for (i = 0; i < count; i++)
    {
        printk("b[%d] = %d ", i, b[i]);
    }
    printk("count = %d\n", count);
    return 0;
}

static void hello_exit(void)
{
    printk("byby\n"); //内核模块卸载的时候打印"byb byb
}

module_init(hello_init); //驱动模块的入口
module_exit(hello_exit); //驱动模块的出口

MODULE_LICENSE("GPL"); //声明模块拥有开源许可证



Makefile

obj-m +=parameter.o
KDIR:=/home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga 
PWD?=$(shell pwd)

all:
	make -C $(KDIR) M=$(PWD) modules

image-20240422171927082

注意:数组最多设5个值

posted @ 2024-04-25 22:34  爱吃冰激凌的黄某某  阅读(13)  评论(0编辑  收藏  举报