misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动。

1、misc_register函数

以前我们需要自己调用一堆的函数去创建设备,比如在以前的字符设备驱动中我们会使用如下几个函数完成设备创建过程:
1 alloc_chrdev_region(); /* 申请设备号 */
2 cdev_init(); /* 初始化 cdev */
3 cdev_add(); /* 添加 cdev */
4 class_create(); /* 创建类 */
5 device_create(); /* 创建设备 */

现在我们可以直接使用 misc_register 一个函数来完成以上 这些步骤
2、 misc_deregister 函数
以前注销设备驱动的时候,我们需要调用一堆的函数去删除此前创建的 cdev 、设备等等内
容,如下所示:

1 cdev_del(); /* 删除 cdev */
2 unregister_chrdev_region(); /* 注销设备号 */
3 device_destroy(); /* 删除设备 */
4 class_destroy(); /* 删除类 */

现在我们可以直接使用 misc_deregister一个函数来完成以上这些步骤

驱动示例如下所示:

#define MISCBEEP_NAME "miscbeep"
#define MISCBEEP_MINOR 144
#define BEEPOFF 0
#define BEEPON 1/* miscbeep设备结构体 */
struct miscbeep_dev
{struct device_node *nd; /* 设备节点 */int beep_gpio;          /* beep gpio */
};struct miscbeep_dev miscbeep;static int miscbeep_open(struct inode *inode, struct file *filp)
{filp->private_data = &miscbeep;return 0;
}static int miscbeep_release(struct inode *inode, struct file *filp)
{return 0;
}static ssize_t miscbeep_write(struct file *filp, const char __user *buf,size_t count, loff_t *ppos)
{int ret;unsigned char databuf[1];struct miscbeep_dev *dev = filp->private_data;return 0;
}/* 设备操作函数 */
struct file_operations miscbeep_fops = {.owner = THIS_MODULE,.open = miscbeep_open,.release = miscbeep_release,.write = miscbeep_write,
};/* miscdevice结构体 */
static struct miscdevice beep_miscdev = {.minor = MISCBEEP_MINOR,.name = MISCBEEP_NAME,.fops = &miscbeep_fops,
};/* probe函数 */
static int miscbeep_probe(struct platform_device *dev)
{int ret = 0;/* 1、初始化锋鸣器IO */miscbeep.nd = dev->dev.of_node;miscbeep.beep_gpio = of_get_named_gpio(miscbeep.nd, "beep-gpios", 0);if (miscbeep.beep_gpio < 0){}ret = gpio_request(miscbeep.beep_gpio, "beep-gpio");if (ret){}ret = gpio_direction_output(miscbeep.beep_gpio, 1); /* 输出,默认高电平 */if (ret < 0){}/* 2、misc驱动注册,无需进行字符驱动注册那一系列步骤 */ret = misc_register(&beep_miscdev);if (ret < 0){goto fail_setoutput;}return 0;}/* remove函数 */
static int miscbeep_remove(struct platform_device *dev)
{gpio_set_value(miscbeep.beep_gpio, 1); /* 拉高,关闭BEEP */gpio_free(miscbeep.beep_gpio);         /* 释放GPIO *//* 2、misc驱动注销,无需进行字符驱动注销那一系列步骤 */misc_deregister(&beep_miscdev);return 0;
}/* platform匹配表 */
static const struct of_device_id beep_of_match[] = {{.compatible = "alientek,beep"},{/* Sentinel */},
};/* platform */
static struct platform_driver miscbeep_driver = {.driver = {.name = "imx6ul-beep",.of_match_table = beep_of_match, /* 设备树匹配表 */},.probe = miscbeep_probe,.remove = miscbeep_remove,
};/* 驱动入口函数 */
static int __init miscbeep_init(void)
{return platform_driver_register(&miscbeep_driver);
}/* 驱动出口函数 */
static void __exit miscbeep_exit(void)
{platform_driver_unregister(&miscbeep_driver);
}module_init(miscbeep_init);
module_exit(miscbeep_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("supersmart");

Linux MISC驱动示例相关推荐

  1. 韦东山 IMX6ULL和正点原子_正点原子Linux第五十七章Linux MISC驱动实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第五十七章Linux MISC驱动实验 misc的意思是 ...

  2. linux MISC 驱动模型分析

    linux MISC 驱动模型分析 阅读led驱动程序的代码的时候,没有发现ldd3中提到的各种字符设备注册函数,而是发现了一个misc_register函数,这说明led设备是作为杂项设备出现在内核 ...

  3. Linux MISC 驱动实验

    目录 MISC 设备驱动简介 硬件原理图分析 实验程序编写 修改设备树 beep 驱动程序编写 编写测试APP 运行测试 编译驱动程序和测试APP 运行测试 misc 的意思是混合.杂项的,因此MIS ...

  4. Linux MISC 驱动实验-基于正点原子IMX6ULL开发板

    misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动.MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 p ...

  5. Linux 驱动开发 四十六:Linux MISC驱动实验

    misc 的意思是混合.杂项的,因此MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动. MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 p ...

  6. Linux SPI 驱动示例

    一 Linux 下 SPI 驱动框架 SPI 驱动框架分为主机控制器驱动和设备驱动,主机控制器也就是 SOC 的 SPI 控制器接口. 1.1 SPI 主机驱动 SPI 主机驱动就是 SOC 的 SP ...

  7. platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架

    platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...

  8. 嵌入式linux MISC设备驱动

    misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某 些外设无法进行分类的时候就可以使用 MISC 驱动.MISC 驱动其实就是最简单的字符设备驱 动,通常嵌套在 ...

  9. linux MISC设备驱动

    系列文章 I.MX6ULL 手册查找使用方法 实战点亮LED(寄存器版) I.MX6ULL 手册查找使用方法 实战点亮LED(固件库版本) linux 字符设备驱动实战 linux LED设备驱动文件 ...

最新文章

  1. 51nod 1225 余数之和(数论)
  2. Redis与Memocache的区别
  3. Android中Log日志的管理之log工具类
  4. JAVA生产环境验证_Java生产环境下性能监控与调优详解
  5. Hacker News热文:请停止学习框架,学习领域驱动设计(DDD)(获500个点赞)
  6. Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...
  7. egg直接取req_Egg服务器基础功能
  8. python requests 提示警告 InsecureRequestWarning
  9. lisp如何将度分秒转换为弧度_重磅干货!如何利用Stata进行空间冷热点分析 | 社论前沿...
  10. 5G时代商业逻辑的五大思考
  11. Java与模式.pdf
  12. 智能聊天对话机器人的对比
  13. 发那科机器人tp文件转成文本_fanuc_机器人中文简易教材.pdf
  14. golang源码解析之chan
  15. data-toggle=dropdown/data-target/data-dismiss/data-backdrop/data-spy/data-slide/data-source是什么意思?
  16. 电信 IPRAN 设备组网方案_ZGQHBJ组网视频监测点组网方案
  17. wget 和scp对比_Linux中curl命令和wget命令的使用介绍与比较
  18. 1312_适用7z命令进行压缩与解压
  19. Android 监听wifi总结
  20. 2020互联网大厂中秋礼盒PK!阿里走情怀,腾讯更复古,最走心的是...(文末有福利)

热门文章

  1. pop客户机程序流程图_labview问题集锦
  2. 高盛发布区块链报告:从理论到实践(中文版)六
  3. utorrent linux安装路径,CentOS6 64位 下安装 utorrent howto BT
  4. ffmpeg 转换flv压缩大小_ffmpeg转换参数和对几种视频格式的转换分析
  5. Laravel实用工具介绍 – Debugbar
  6. 在线学习DITA(英文)
  7. 微前端qiankun使用+踩坑
  8. P3371 【模板】单源最短路径(弱化版)
  9. CSS3地图动态实例(圆圈向外扩散)
  10. Python编译环境合集