linux设备驱动程序--类class的实现
- #include <linux/module.h>
- #include <linux/fs.h>
- #include <linux/sched.h>
- #include <linux/delay.h>
- #include <linux/atomic.h>
- #include <linux/types.h>
- #include <linux/interrupt.h>
- #include <linux/kthread.h>
- #include <linux/slab.h>
- #include <linux/io.h>
- #include <linux/gpio.h>
- #include <linux/dma-mapping.h>
- //定义设备名称为test-dev
- #define DEV_NAME "test-dev"
- //定义并初始化一个类
- struct class cla = {
- .name = "test-cla", //将类的名字设置为test-cla
- .owner = THIS_MODULE, //该类的拥有者为这个模块
- };
- int test_open(struct inode *node, struct file *filp)
- {
- printk("test open\n");
- return 0;
- }
- int test_close(struct inode *node, struct file *filp)
- {
- printk("test close\n");
- return 0;
- }
- //填充并初始化file_operations结构体
- struct file_operations fops = {
- .owner = THIS_MODULE,
- .open = test_open,
- .release = test_close,
- };
- //定义设备
- struct device dev = {
- .init_name = DEV_NAME,
- .class = &cla, //设备归类cla;
- .release = test_release,
- };
- //定义主设备号和次设备号
- int major = 0;
- int minor = 0;
- int test_init(void)
- {
- int ret;
- printk("test init\n");
- //将类进行注册
- ret = class_register(&cla);
- //如果返回值不为0,返回错误值
- if(IS_ERR_VALUE(ret))
- {
- return ret;
- }
- //注册一个字符设备驱动
- ret = register_chrdev(major, DEV_NAME, &fops);
- //如果注册不成功返回错误值并撤销类的实现
- if(IS_ERR_VALUE(ret))
- {
- class_unregister(&cla);
- return ret;
- }
- major = ret;
- //printk("major = %d\n", major);
- //申请主设备号与次设备号
- dev.devt = MKDEV(major, minor);
- //将设备进行注册
- ret = device_register(&dev);
- //如果设备注册不成功,撤销类设备注册并解除字符设备驱动的注册
- if(IS_ERR_VALUE(ret))
- {
- class_unregister(&cla);
- unregister_chrdev(major, DEV_NAME);
- return ret;
- }
- return 0;
- }
- void test_exit(void)
- {
- printk("test exit\n");
- //解除字符设备的注册
- unregister_chrdev(major, DEV_NAME);
- //解决类设备注册
- device_unregister(&dev);
- class_unregister(&cla);
- }
- module_init(test_init);
- module_exit(test_exit);
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("yangyx");
- MODULE_VERSION("1.1");
linux设备驱动程序--类class的实现的更多相关文章
- Linux设备驱动程序学习----2.内核模块与应用程序的对比
内核模块与应用程序的对比 更多内容请参考Linux设备驱动程序学习----目录 1. 内核模块与应用程序的对比 内核模块和应用程序之间的不同之处: 大多数中小规模的应用程序是从头到尾执行单个任务,而模 ...
- linux设备驱动程序-设备树(1)-dtb转换成device_node
linux设备驱动程序-设备树(1)-dtb转换成device_node 本设备树解析基于arm平台 从start_kernel开始 linux最底层的初始化部分在HEAD.s中,这是汇编代码,我们暂 ...
- linux设备驱动程序-i2c(1):i2c总线的添加与实现
linux设备驱动程序-i2c(1):i2c总线的添加与实现 (基于4.14内核版本) 在上一章节linux设备驱动程序-i2c(0)-i2c设备驱动源码实现中,我们演示了i2c设备驱动程序的源码实现 ...
- 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态
嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...
- 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序
嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...
- 嵌入式Linux设备驱动程序:发现硬件配置
嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...
- linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)
原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...
- 【转】linux设备驱动程序中的阻塞机制
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/04/2275272.html 阻塞与非阻塞是设备访问的两种方式.在写阻塞与非阻塞的驱动程序时,经 ...
- Linux设备驱动程序 第三版 读书笔记(一)
Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...
随机推荐
- Gazebo與ROS版本說明
使用哪种ROS / Gazebo版本的组合 介绍 本文档提供了有关将不同版本的ROS与不同版本的Gazebo结合使用的选项的概述.建议在安装Gazebo ROS包装之前阅读它.重要!简单的分析,快速和 ...
- DBoW2应用
图像对应的bag-of-words向量\(v_t\) 假设词典总共有\(W\)个单词,那么每一幅图像能够用一个\(W\)维的向量表示 \((t_1, t_2, t_3, ..., t_W)\)其中 \ ...
- Android初级教程反射+AIDL+内容观察者监控黑名单号码代码模板
对于想要拦截一些莫名的陌生号码,就需要电话拦截功能与删除其电话记录功能.拦截的主要业务逻辑,分别是在一个服务里面进行:1.注册电话监听:2.取消注册电话监听(当然注册于取消是在服务里面建立一个广播接收 ...
- Android简易实战教程--第六话《开发一键锁屏应用2·完成》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...
- 剑指Offer——网易校招内推笔试题+模拟题知识点总结
剑指Offer--网易校招内推笔试题+模拟题知识点总结 前言 2016.8.2 19:00网易校招内推笔试开始进行.前天晚上利用大约1小时时间完成了测评(这个必须做,关切到你能否参与面试).上午利用2 ...
- xml特殊字符处理 如&
写了个request2XML的方法,每当数据中有'<'.'&'符号时,封装的XML就无法解析.发现了XML里的CDATA属性,问题迎刃而解!在XML文档中的所有文本都会被解析器解析 ...
- Mpg123源代码详解
Mpg123与libmad一样,支持mpeg1,2,2.5音频解码.目前来看mpg123比libmad支持了网络播放功能.而且libmad基本上开源社区在2005年左右,基本停止更新,mpg123至今 ...
- Windows自删除程序和DLL
Windows自删除程序和DLL 参照文章 http://blog.csdn.net/rxxi/article/details/741557 做了个自删除的程序SelfDelete.代码下载(我的FT ...
- java linux 项目经常无故被关闭 进程无故消息
布了几个项目.居然天天会自动的挂掉.急了.花时间解决了一下.总结方案如下: 1.磁盘满了.这大家都懂,清一下 2.tomcat在关闭的或是重启的时候,常常后台进程没有被关闭.需要用ps aux|gre ...
- Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具
Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具 记得我的第一篇博客就是写Android Studio,但是现在看来还是有些粗糙了,所有重构了一下思路, ...