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 ...
随机推荐
- JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...
- (一二〇)CALayer的一些特性
1.每个View都自带一个CALayer,称为rootLayer,layer可以和实现与View一样的显示功能,但是它不继承UIResponse,也就是说它无法处理事件,所以为了处理事件还是要用Vie ...
- Android初级教程:屏幕分辨率
在app编码中经常需要获取手机的屏幕分辨率(宽*高),原来我直接上网拷贝代码,但在使用过程中却发现诸多不便. 不便一:下面代码中的getWidth和getHeight在adt上提示deprecated ...
- 如何在mac OS X中查看Emoji表情的含义
使用ctrl+空格,在搜索框中搜索 TextEdit程序,其实中文是 文本编辑 程序, 运行,在菜单中选择 编辑->特殊字符 然后可以看到每个图标的说明啦
- ExpandableListView简单应用及listview模拟ExpandableListView
首先我们还是来看一些案例,还是拿搜狐新闻客户端,因为我天天上下班没事爱看这个东东,上班又没时间看新闻,上下班路途之余浏览下新闻打发时间嘛. 看这个效果挺棒吧,其实实现起来也不难,我 ...
- java常用IO流集合用法模板
package com.fmy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import jav ...
- Android进阶(二十七)Android原生扰人烦的布局
Android原生扰人烦的布局 在开发Android应用时,UI布局是一件令人烦恼的事情.下面主要讲解一下Android中的界面布局. 一.线性布局(LinearLayout) 线性布局分为: (1) ...
- 【翻译】在Ext JS 6通用应用程序中使用既共享又特定于视图的代码
原文:Using Both Shared and View-Specific Code in an Ext JS 6 Universal App 在本文,在展示如何编写Ext JS 6通用应用程序代码 ...
- 调试bootmgr&winload vista&win7 x86&x64
设置调试bootmgr 1.以管理员权限运行cmd.exe 2.执行以下命令 3. 参照我的另一篇文章<win8 + vmware + windbg 双机调试 >中的第1.3步,建立wi ...
- iOS数据解析UI_14
数据解析:就是按照约定(假象)好的格式提取数据的过程就叫解析: 提供数据方(后台):工作就是把数据按照一定的格式存储起来 提取数据方(前台):工作就是把数据按照一定的格式读取出来 主流的格式:X ...