file、inode支持多位次设备号

在Linux驱动开发中,通过inode的次设备号信息,在open时存入file的private_data,确保在read等操作时能区分不同的次设备号。初始化阶段,使用cdev数组和register_chrdev_region预先分配次设备号,并通过cdev_add将设备操作函数与次设备关联。open函数将inode中的次设备信息与mydev结构体对应,read操作则依赖全局变量pmydev和file的private_data来识别不同的次设备。
摘要由CSDN通过智能技术生成

在这里插入图片描述
如何在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值