热门标签 | 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


推荐阅读
  • 首先说一下,这是我在CSDN上的第一个文章,其实这个账号早在几年前就申请了,不过当时只是为了下载一个资源,而且也不怎么懂信息技术相关的领域,后来就再也没怎么动过,直到今天我才开始使用这个账号 ... [详细]
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • 本文探讨了如何利用自定义URI方案和注册表编辑,在Windows操作系统中实现从Web浏览器启动本地应用程序的方法,同时强调了这一过程中的安全考虑。 ... [详细]
  • 本文介绍了如何在 Linux 系统上构建网络路由器,特别关注于使用 Zebra 软件实现动态路由功能。通过具体的案例,展示了如何配置 RIP 和 OSPF 协议,以及如何利用多路由器查看工具(MRLG)监控网络状态。 ... [详细]
  • 学习目的:1.了解android线程的使用2.了解主线程与子线程区别3.解析异步处理机制主线程与子线程:所谓主线程,在Windows窗体应用程序中一般指UI线程,这个是程序启动的时 ... [详细]
  • 本文深入探讨了Java注解的基本概念及其在现代Java开发中的应用。文章不仅介绍了如何创建和使用自定义注解,还详细讲解了如何利用反射机制解析注解,以及Java内建注解的使用场景。 ... [详细]
  • C++编程基础:探索自定义数据类型
    本文继续深入C++编程的基础知识,重点讲解自定义数据类型的概念及其应用,包括枚举类型、结构体和联合体等。 ... [详细]
  • 本文详细介绍了MySQL中关于员工数据库的基础知识、操作技巧以及常见问题的解决方案,适合初学者和有一定基础的用户阅读。 ... [详细]
  • 导读上一篇讲了zsh的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf的使用等等。其中很多内容没有必要记忆,作为手册参 ... [详细]
  • 本文档详细介绍了服务器与应用系统迁移的策略与实施步骤。迁移不仅涉及数据的转移,还包括环境配置、应用兼容性测试等多个方面,旨在确保迁移过程的顺利进行及迁移后的系统稳定运行。 ... [详细]
  • SonarQube配置与使用指南
    本文档详细介绍了SonarQube的配置方法及使用流程,包括环境准备、样本分析、数据库配置、项目属性文件解析以及插件安装等内容,适用于具有Linux基础操作能力的用户。 ... [详细]
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • scrapyredis分布式爬虫 ... [详细]
  • JavaScript 实现购物商城商品图片放大功能
    本文介绍了如何使用 JavaScript 和 CSS 实现购物商城中商品图片的放大功能,解决了图片放大时文字位置变化的问题,并提供了详细的代码示例。 ... [详细]
  • 本文详细探讨了 Java 中状态模式与策略模式的核心差异,旨在帮助开发者在实际应用中准确选择和运用这些设计模式。 ... [详细]
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社区 版权所有