![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/52c359c39c005f6608e97826b2bfcee1.png)
如何在read等操作时区分不同的次设备号?
前提
1、inode是随着设备节点伴生的,每一个设备节点对应一个硬件,i_rdev包含有主次设备号信息;
int (*open) (struct inode *, struct file *);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
2、可以发现open时,有两个参数inode和file,由于inode含有主次设备号,因此open可以利用inode区分次设备号的不同;
struct file {
// ...
struct path f_path;
struct inode *f_inode;
const struct file_operations *f_op;
/* needed for tty driver, and maybe others */
void *private_data;
// ...
}
3、file结构体在inode之外还提供一个成员,可以去表征次设备号;所以open需要将inode资源信息(次设备)存入file的private_data。
初始化
核心:通过一个的数组存放cdev
数组的定义以及初始化
创建数组:
#define MAX_COM_UNM = 2
struct mydev{
struct cdev cdev;
char *reg;
int test;
};
struct mydev *pmydev[MAX_COM_UNM];
1、cdev是关键;不同的mydev会有不同的cdev;cdev会被注入进char_device