Linux按键驱动程序设计(1)-混杂设备驱动模型
2017-07-01 12:02
295 查看
1、混杂设备概念
在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查找到相应的混杂设备。混杂设备是字符设备的一种,它们共享一个主设备号(10),但次设备号不同,所有混杂设备形成一个链表,对设备发给你问时内核根据次设备号查找到相应的miscdevice设备。这样做的好处,节约主设备号,将某些设备用链表的形式链接在一起,最后通过查找次设备区分。一般来说LED驱动程序和按键驱动程序都可以分类成混杂设备。
2、设备描述
Linux中使用struct miscdevice来描述一个混杂设备。struct miscdevice { int minor; /* 次设备号*/ const char *name; /* 设备名*/ const struct file_operations *fops; /*文件操作*/ struct list_head list; struct device *parent; struct device *this_device; };
这里主要关注次设备号、设备名和文件操作3个成员。
3、设备注册及注销
Linux中使用misc_register函数来注册一个混杂设备驱动。int misc_register(struct miscdevice * misc)
注销:
int misc_deregister(struct miscdevice * misc)
4、实例代码
混杂设备的驱动仍然是一个模块代码,同时按照上述的介绍可以写出混杂设备驱动程序的框架了。1、编写模块代码框架
2、初始化miscdevice
3、注册miscdevice
4、实现file_operations里面的函数代码
5、注销miscdevice
#include <linux/init.h> #include <linux/module.h> #include <linux/miscdevice.h> int key_open(struct inode *node, struct file *filp) { return 0; } struct file_operations key_fops { .open = key_open; }; struct miscdevice key_miscdev{ .minor = 200; .name = "key" .fops = &key_fops }; static int key_init(void) { misc_register(&key_miscdev); return 0; } static void key_exit(void) { misc_deregister(&key_miscdev); } MODULE_LICENSE("GPL"); module_init(key_init); module_exit(key_exit);
相关文章推荐
- 12.按键驱动程序设计(1)-混杂设备驱动模型
- 按键驱动程序设计---混杂设备、中断分层处理、工作队列、阻塞型驱动
- Linux 设备驱动--- 内核等待队列 --- wait_queue_head --- wait_event_interruptible --- 按键驱动程序优化
- Linux驱动程序开发 - 设备驱动模型初探
- Linux驱动程序开发 - 设备驱动模型初探(二)
- Linux设备模型(总线、设备、驱动程序和类)之三:device_driver && 多厂家驱动自动识别
- 基于mini6410的linux驱动学习总结(四 设计字符设备驱动程序)
- Linux驱动程序开发 - 设备驱动模型初探
- Linux设备模型(总线、设备、驱动程序和类)之三:device_driver && 多厂家驱动自动识别
- Linux驱动程序开发 - 设备驱动模型初探
- Linux 设备驱动--- 内核等待队列 --- wait_queue_head --- wait_event_interruptible --- 按键驱动程序优化
- Linux驱动程序开发007 - 设备驱动模型初探
- Linux驱动开发-混杂字符设备驱动模型笔记 4
- 混杂设备驱动模型设计LED驱动
- Linux驱动程序开发 - 设备驱动模型初探
- 07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-按键驱动程序之异步通知机制+原子操作+互斥信号量+阻塞与非阻塞+定时器去抖
- Linux驱动程序开发 - 设备驱动模型初探
- Linux混杂设备驱动模型
- Linux设备模型(总线、设备、驱动程序和类)之三:device_driver && 多厂家驱动自动识别
- Linux混杂设备驱动 - 按键设备驱动