私有数据
发表于:2022-02-20 | 分类: Linux

[[toc]]

在Linux驱动开发中的私有数据

​ 大多数linux驱动开发中”,那就是将文件的私有的数据private_data指向设备结构体,在read(),write,ioctl(),llseek等函数通过private_data访问设备结构体。一般,我们在open里,讲设备结构体赋值给文件私有数据指针,然后我们在ioctlreadwrite等函数里面,通过filep找到设备结构体,并对设备进行操作。

{9,10}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
struct globalmem_dev
{
struct cdev cdev; // cdev结构体,用于描述设备的结构体
unsigned char mem[GLOBALMEM_SIZE]; //全局内存
}; //自定义设备结构体
static struct globalmem_dev *globalmem_devp; //指向设备的结构体指针
int globalmem_open(struct inode *inode, struct file *filp)
{
filp->private_data = globalmem_devp;
//将设备结构体指针赋给文件私有数据指针,也就是将文件的私有的数据private_data指向设备结构体
return 0;
}
//设备控制函数
static int globalmem_ioctl(struct inode *inodep, struct file *filp, unsigned int cmd, unsigned long arg)
{
struct globalmem_dev *dev = filp->private_data; //获得设备结构体指针
switch (cmd)
{
case MEM_CLEAR:
memset(dev->mem, 0, GLOBALMEM_SIZE); //清除全局内存
printk(KERN_INFO "globalmem is set to zero\n");
break;

default:
return -EINVAL;
}
return 0;
}
上一篇:
ioctl()
下一篇:
GitHub pages 博客搭建