杂项设备的实现

Linux内核提供的杂项设备(miscdevice)具有很强的包容性,在实际开发过程中使用简单。但是有一个较大的缺点就是,杂项设备的次设备号的分配都是软件开发者自己随意分配的,因此移植性较差,有时会造成挂载后无法使用的情况,因此在选择次设备号前应当对其内核中杂项设备号的分配进行查询后再分配合适的次设备号。当然Linux总会阻止我们做这样的傻事,我们可将miscdevice设备结构体的成员minor设为MISC_DYNAMIC_MINOR,以此让系统自动分配次设备号。

miscdevice设备共享主设备号为10的MISC_MAJOR,其本质上是一个字符设备,其次设备号MINOR可在实际编写的驱动中设置。系统中的所有该类设备形成一个链表的形式,当系统访问该类设备时,以遍历该链表的形式,通过次设备号匹配对应的miscdevice设备,进而对设备进行file_operations的接口进行操作。

杂项设备在实际的工作过程:insmod杂项设备->设备初始化->创建misc class->注册一个字符设备(设备号:10)->调用misc_register()注册一个杂项设备->生成设备节点。

主要结构体:


  
  
struct miscdevice{ int minor; // 若设置为MISC_DYNAMIC_MINOR,系统自动分配未使用的minor const char *name; const stuct file_operations *fops; struct list_head list; struct device *parent; struct device *this device; const char *nodename; mode_t mode; };

struct file_operations scull_fops = {
 	.owner =  THIS_MODULE, 
	.llseek =  scull_llseek, 
 	.read =  scull_read, 
	.write =  scull_write, 
	.ioctl =  scull_ioctl, 
	.open =  scull_open, 
	.release =  scull_release,  
};

miscdevice设备的注册和注销
注册:int misc_register(struct miscdevice *misc)
注销:int misc_deregister(struct miscdevice *misc)








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值