Linux MISC驱动示例
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(); /* 创建设备 */
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驱动示例相关推荐
- 韦东山 IMX6ULL和正点原子_正点原子Linux第五十七章Linux MISC驱动实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第五十七章Linux MISC驱动实验 misc的意思是 ...
- linux MISC 驱动模型分析
linux MISC 驱动模型分析 阅读led驱动程序的代码的时候,没有发现ldd3中提到的各种字符设备注册函数,而是发现了一个misc_register函数,这说明led设备是作为杂项设备出现在内核 ...
- Linux MISC 驱动实验
目录 MISC 设备驱动简介 硬件原理图分析 实验程序编写 修改设备树 beep 驱动程序编写 编写测试APP 运行测试 编译驱动程序和测试APP 运行测试 misc 的意思是混合.杂项的,因此MIS ...
- Linux MISC 驱动实验-基于正点原子IMX6ULL开发板
misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动.MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 p ...
- Linux 驱动开发 四十六:Linux MISC驱动实验
misc 的意思是混合.杂项的,因此MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动. MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 p ...
- Linux SPI 驱动示例
一 Linux 下 SPI 驱动框架 SPI 驱动框架分为主机控制器驱动和设备驱动,主机控制器也就是 SOC 的 SPI 控制器接口. 1.1 SPI 主机驱动 SPI 主机驱动就是 SOC 的 SP ...
- platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架
platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...
- 嵌入式linux MISC设备驱动
misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某 些外设无法进行分类的时候就可以使用 MISC 驱动.MISC 驱动其实就是最简单的字符设备驱 动,通常嵌套在 ...
- linux MISC设备驱动
系列文章 I.MX6ULL 手册查找使用方法 实战点亮LED(寄存器版) I.MX6ULL 手册查找使用方法 实战点亮LED(固件库版本) linux 字符设备驱动实战 linux LED设备驱动文件 ...
最新文章
- 51nod 1225 余数之和(数论)
- Redis与Memocache的区别
- Android中Log日志的管理之log工具类
- JAVA生产环境验证_Java生产环境下性能监控与调优详解
- Hacker News热文:请停止学习框架,学习领域驱动设计(DDD)(获500个点赞)
- Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...
- egg直接取req_Egg服务器基础功能
- python requests 提示警告 InsecureRequestWarning
- lisp如何将度分秒转换为弧度_重磅干货!如何利用Stata进行空间冷热点分析 | 社论前沿...
- 5G时代商业逻辑的五大思考
- Java与模式.pdf
- 智能聊天对话机器人的对比
- 发那科机器人tp文件转成文本_fanuc_机器人中文简易教材.pdf
- golang源码解析之chan
- data-toggle=dropdown/data-target/data-dismiss/data-backdrop/data-spy/data-slide/data-source是什么意思?
- 电信 IPRAN 设备组网方案_ZGQHBJ组网视频监测点组网方案
- wget 和scp对比_Linux中curl命令和wget命令的使用介绍与比较
- 1312_适用7z命令进行压缩与解压
- Android 监听wifi总结
- 2020互联网大厂中秋礼盒PK!阿里走情怀,腾讯更复古,最走心的是...(文末有福利)