【Linux】【驱动】驱动挂载的时候给驱动传递参数
- 绪论
- 1.什么是驱动传参驱动传参就是传递参数给我们的驱动举例:
- 2.驱动传参数有什么作用呢?
- 3. 传递单个参数使用如下的数组
- 4. 传递数组使用以下函数:
- 传递数字值
- 代码
- 指令
- 传递数组
- 代码传递数组
- 指令
绪论
1.什么是驱动传参驱动传参就是传递参数给我们的驱动举例:
insmod beep.ko a=1
2.驱动传参数有什么作用呢?
(1)设置驱动的相关参数,比如设置缓冲区的大小
(2)设置安全校验,防止我们写的驱动被人盗用
3. 传递单个参数使用如下的数组
项目 | 函数 |
---|---|
函数 | module param(name,type,perm); |
参数 name | 要传递进去参数的名称 |
参数 type | 要传递进去参数的类型 |
参数 perm | 要传递进去参数的读写权限 |
参数库中有帮忙声明,不同的参数代表了不同的功能
宏定义 | 权限解释 |
---|---|
#define S_IRUSR 00400 | 文件所有者可读 |
#define S_IWUSRO0200 | 文件所有者可写 |
#define S_IXUSR 00100 | 文件所有者可执行 |
#define S IRGRPOO040 | 与文件所有者同组的用户可读 |
#define S IWGRPO0020 | |
#define S IXGRP 00010 | |
#define s IROTH 00004 | 与文件所有者不同组的用户可读 |
#define S_IWOTH00002 | |
#define S IROTH 00004 | 与文件所有者不同组的用户可读 |
4. 传递数组使用以下函数:
module_param_array(name,type,nump,perm)
参数 name 要传递进去参数的名称
参数 type 要传递进去参数的类型
nump 实际传入进去参数的个数
perm 要传递进去参数的读写权限
传递数字值
代码
a 就是传递的值,代码中直接去调用a就可以了
#include <linux/init.h>
#include <linux/module.h>//定义整型变量 a
static int a;//传递普通的参数 a,参数权限为 S_IRUSR,意为可读
module_param(a ,int,S_IRUSR);//drivers for init
static int hello_init(void)
{//打印变量 aprintk("a = %d \n",a);printk("hello world! \n");return 0;
}//drivers for exit
static void hello_exit(void)
{//打印变量 aprintk("a = %d \n",a); printk("Hello exit \n");}module_init(hello_init);
module_exit(hello_exit);MODULE_LICENSE("GPL");
指令
cp chrdevbase.ko /home/book/nfs_rootfs/
insmod chrdevbase.ko a=9
传递数组
代码传递数组
#include <linux/init.h>
#include <linux/module.h>//定义整型变量 a
static int a;
//定义数组 b
static int b[5];
static int count;//传递普通的参数 a,参数权限为 S_IRUSR,意为可读
module_param(a ,int,S_IRUSR);
//传递数组的参数
module_param_array(b,int,&count,S_IRUSR);//drivers for init
static int hello_init(void)
{int i;//循环遍历数组 b 的值for(i = 0;i<count;i++){//打印数组 b 的值printk("b[%d] = %d \n",i,b[i]);}//打印传入参数的个数printk("count= %d \n",count);//打印变量 a//printk("a = %d \n",a);//printk("hello world! \n");return 0;
}//drivers for exit
static void hello_exit(void)
{//打印变量 aprintk("a = %d \n",a); printk("Hello exit \n");}module_init(hello_init);
module_exit(hello_exit);MODULE_LICENSE("GPL");
指令
cp chrdevbase.ko /home/book/nfs_rootfs/
这里定义的数组是5,所以传递的参数不能超过5
insmod chrdevbase.ko b=1,2,3,4,5