加载中…
个人资料
孤峰乔木
孤峰乔木
  • 博客等级:
  • 博客积分:0
  • 博客访问:40,095
  • 关注人气:24
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

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的支持。

 

5. 参考:

http://blog.csdn.net/chenlong12580/article/details/7339127

 

6. 源码:

https://github.com/ahuer2435/Linux_driver_study/tree/master/ldd_misc

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有