Yuhang Zheng

第八节、驱动模块传参数

N 人看过

本节用于介绍驱动模块传参数

1、什么是驱动传参驱动传参就是传递参数给我们的驱动。

举例:

insmod beep.ko a=1

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

  1. 设置驱动的相关参数,比如设置缓冲区的大小
  2. 设置安全校验,防止我们写的驱动被入盗用

3、怎么给驱动传参数?

传递普通的参数

比如char,int类型的

文件位置路径:include/linux/moduleparam.h

#define module_param(name, type, perm)                          \
        module_param_named(name, name, type, perm)
//参数
//name:要传递进去的参数的名称
//type:类型
//perm:参数读写的权限,在include/uapi/linux/stat.h文件中有定义

加载模块测试

root@localhost:~# insmod parameter.ko a=3
[  288.568359] a = 3

加载完模块之后可以在sys/module下面生成对应模块名称的目录,在该目录下面的parameters目录内可以看到我们给驱动传递的参数

可以查看权限以及值

root@localhost:~# ls -l /sys/module/parameter/parameters/
total 0
-r-------- 1 root root 4096 Jan 29 00:06 a
root@localhost:~# cat /sys/module/parameter/parameters/a
3

传递数组

文件位置路径:include/linux/moduleparam.h

#define module_param_array(name, type, nump, perm)              \
        module_param_array_named(name, name, type, nump, perm)
//参数
//name:要传递进去的参数的名称
//type:类型
//nump:实际传入进去的参数的个数
//perm:参数读写的权限,在include/uapi/linux/stat.h文件中有定义

加载模块测试

root@localhost:~# insmod parameter.ko b=1,2,3,4,5
[ 1454.314523] b[0] = 1
[ 1454.314528] b[1] = 2
[ 1454.314532] b[2] = 3
[ 1454.314535] b[3] = 4
[ 1454.314538] b[4] = 5
[ 1454.314541] count = 5

3、如果我们多传递进去参数,会发什么什么?

会报错