热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux混杂设备miscdevice设备介绍

2019独角兽企业重金招聘Python工程师标准混杂设备是字符设备的一种,混杂设备(用miscdevice结构体表述)。miscdevice共享一个主设备号MI

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

混杂设备是字符设备的一种,混杂设备(用miscdevice结构体表述)。miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同。 所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备。

struct miscdevice  {int minor;           //次设备号const char *name;const struct file_operations *fops;  //文件操作集struct list_head list;struct device *parent;struct device *this_device;const char *nodename;mode_t mode;
};

通常情况下,一个字符设备都在初始化的过程中的步骤:

1,通过alloc_chrdev_region()分配主/次设备号。2,使用cdev_init()和cdev_add()来以一个字符设备注册自己。 详细介绍见http://my.oschina.net/u/274829/blog/283702

而一个misc驱动,则可以只用一个调用misc_register()来完成这所有的步骤。

使用流程

static int __init dev_init(void)
{int ret;ret = misc_register(&misc);  //注册设备号return ret;
}

设备结构

static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,  //这里注意,一般分配为0,意思:让系统自动分配,防止冲突.name = DEVICE_NAME,.fops = &dev_fops,
};

文件操作集

static struct file_operations dev_fops = {.owner    =    THIS_MODULE,.ioctl    =    leds_ioctl,
};static int sbc2440_leds_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{switch(cmd) {case 0:....;break;default:return -EINVAL;}
}

退出注册

static void __exit dev_exit(void)
{misc_deregister(&misc);  //退出设备printk (DEVICE_NAME"\tuninstalled\n");
}

详细应用例程见ok6410-led流水灯控制文件 http://my.oschina.net/u/274829/blog/267552


转载于:https://my.oschina.net/u/274829/blog/285164


推荐阅读
author-avatar
手机用户2502935311
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有