linux misc设备

Linux驱动程序--misc设备驱动

 (2017-07-17 10:54:28)

转载

 分类: Linux驱动

1. 原由:

随着字符设备种类和数量的增加,设备号越来越紧张,为此Linux系统提出misc设备模型以解决此问题。

 2. 解决方案:

所有misc设备其主设备号都是10,不同设备使用不同的次设备号区分。另外misc设备驱动会为设备自动创建设备文件,不需要想cdev设备那样,需要自己手动创建,所以使用起来更为方便。

 3.  底层支持:

(1)两个数据结构:

struct file_operations dev_fops = {

.open = test_open,

.release = test_close,

.write = test_write,

.read = test_read,

};

文件操作结构,这一步可cdev是一样的,都是底层文件操作。

#define DEVICE_NAME "misc_dev"

struct miscdevice misc_dev={

    .minor = MISC_DYNAMIC_MINOR,

    .name = DEVICE_NAME,

    .fops = &dev_fops,

};

misc设备结构,主要包含次设备号,设备名和文件操作结构指针。设备名最终会出现在/dev下,生成设备文件misc_dev。在/sys/devices/virtual/misc/下生成设备目录,里面包含设备属性文件。在/sys/class/misc/下生成符号链接文件misc_dev指向/sys/devices/virtual/misc/misc_dev目录。

(2)  函数接口:

int misc_register(struct miscdevice * misc)  完成misc设备注册。

int misc_deregister(struct miscdevice *misc) 完成misc设备注销。

4.  说明:

(1)  misc设备完成的是用户层到底层文件操作函数的映射,底层操作函数和具体设备的映射需要驱动自己完成,可以使用设备地址或者结合其他总线接口,例如i2c的ifly设备,可以在底层函数中,直接调用i2c相关接口函数实现。

(2)  misc设备被实现为一个子系统,在子系统初始化阶段调用misc_init,设置了主设备号以及misc设备的文件操作。此时的misc设备文件操作和具体设备文件操作不同,这里的open函数需要根据不同的此设备号选择相应具体设备的底层文件操作。

(3)  在misc设备注册时,系统自动创建设备文件/dev/misc_dev,这需要Linux设备模型以及udev的支持。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值