Linux 混杂设备、外部中断和输入子系统
混杂设备也是一种字符设备,主设备号固定为10。相对于普通字符设备驱动,它不需要自己去生成设备文件。
1、声明使用的头文件
#include <linux/miscdevice.h>
2、定义一个混杂设备:
static struct miscdevice miscDevice = {
.minor = MISC_DYNAMIC_MINOR, //自动分配从设备号 .name = "设备名称",
.fops = &dev_fops, //设备文件操作指针 };
3、注册混杂设备:
misc_register(&miscDevice) //成功返回0 4、注销混杂设备:
misc_deregister(&miscDevice);
在驱动中使用外部中断
1、声明头文件
#include <linux/interrupt.h>
#include <mach/irqs.h>
2、申明中断处理程序
static irqreturn_t handler(int irq,void *dev_ID)
{
... ....
return IRQ_RETVAL(IRQ_HANDLED);
}
中断处理程序不能用户空间发送或接收数据,以及使用引起阻塞或调度的函数。 在中断处理函数中分配内存要使用GFP_ATOMIC标志,避免中断处理函数进入睡眠。
3、注册中断
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)
//成功返回返回0 irq:中断号
handler:中断处理程序
flags:与中断相关的标志
IRQF_TRIGGER_RISING:上升沿触发
IRQF_TRIGGER_FALLING:下降沿触发
IRQF_TRIGGER_HIGH:高电平触发
IRQF_TRIGGER_LOW:低电平触发
IRQF_SAMPLE_RANDOM:为系统随机发生器提供支持
IRQF_SHARED:中断可在设备间共享
IRQF_DISABLED:是否快速中断 name:中断名称
dev:主要用于共享中断,可通过该参数向中断处理程序传递设备号或其它参数
4、注销中断:
free_irq(unsigned int irq)
5、其它:
disable_irq(unsigned int irq)
enable_irq(unsigned int irq)
输入子系统 input子系统:
1、头文件:
#include <asm/bitops.h>
#include <linux/input.h>
2、申明
static struct input_dev *input_Dev
3、初始化
input_Dev = input_allocate_device();
input_Dev->name = "名称";
input_Dev->id.bustype = BUS_HOST; //总线类型
BUS_PCI
BUS_ISAPNP
BUS_USB
BUS_HIL
BUS_BLUETOOTH
BUS_VIRTUAL
BUS_ISA BUS_I8042
BUS_XTKBD
BUS_RS232
BUS_GAMEPORT
BUS_PARPORT
BUS_AMIGA
BUS_ADB
BUS_I2C
BUS_HOST
BUS_GSC
BUS_ATARI
input_Dev->id.vendor = 供应商代码;
input_Dev->id.version = 版本;
set_bit(EV_KEY,input_Dev->evbit); //支持按键事件类型
EV_KEY :按键
EV_REL :相对坐标
EV_ABS:绝对坐标
EV_SND:声音
EV_FF:力反馈 ... ...
set_bit(KEY_A,input_Button->keybit); //设置支持按键A
4、注册输入设备
input_register_device(struct input_dev *dev);
5、报告输入事件
input_report_key(struct input_dev *dev, unsigned int code, int value)
code:事件代码,可在input.h中查询相关值
value:事件值,如果是按键类型,按下为1,松开为0
事件同步,告知input core,驱动已发出一次完整的报告。
input_sync((struct input_dev *dev)
5、注销输入设备
input_unregister_device(struct input_dev *dev); 释放设备内存
input_free_device(struct input_dev *dev);
Linux 混杂设备、外部中断和输入子系统的更多相关文章
- Linux混杂设备驱动
1. Linux混杂设备驱动模型 ① 在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice).所有混杂设备形成一个链表, ...
- Linux混杂设备驱动学习
Linux混杂设备是字符设备的一类,主要是混杂设备拥有相同的主设备号(10),但是次设备号是不同的.所有的混杂设备行程一个链表,对设备访问时内核更据次设备号查找到相应的混杂设备. 混杂设备用struc ...
- Linux驱动之一个简单的输入子系统程序编写
的在Linux驱动之输入子系统简析已经分析过了输入子系统的构成,它是由设备层.核心层.事件层共同组成的.其中核心层提供一些设备层与事件层公用的函数,比如说注册函数.反注册函数.事件到来的处理函数等等: ...
- linux 混杂设备驱动之adc驱动
linux2.6.30.4中,系统已经自带有了ADC通用驱动文件---arch/arm/plat-s3c24xx/adc.c,它是以平台驱动设备模型的架构来编写的,里面是一些比较通用稳定的代码,但是l ...
- 10. linux输入子系统/input 设备【转】
转自:https://www.cnblogs.com/crmn/articles/6696819.html 按键事件信息之上报绝对事件信息之上报相对事件信息之上报功能键驱动编写多点触控事件的上报 只产 ...
- Linux输入子系统(转)
Linux输入子系统(Input Subsystem) 1.1.input子系统概述 输入设备(如按键,键盘,触摸屏,鼠标等)是典型的字符设备,其一般的工作机制是低层在按键,触摸等动作发生时产生一个中 ...
- linux 输入子系统之电阻式触摸屏驱动
一.输入子系统情景回忆ING...... 在Linux中,输入子系统是由输入子系统设备驱动层.输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成.其中设备 ...
- linux输入子系统(6)-input子系统介绍及结构图
注:本系列转自: http://www.ourunix.org/post/290.html input子系统介绍 输入设备(如按键,键盘,触摸屏,鼠标,蜂鸣器等)是典型的字符设备,其一 ...
- linux 输入子系统(1)----系统概述
输入设备的工作中,只是中断.读键值/坐标值是设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通用的,基于此,内核设计了input输入子系统,由核心层 ...
随机推荐
- js_sl 无缝切换
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- java 的开源wiki维基系统
几乎所有 维基 系统的对比网址: http://www.wikimatrix.org/ XWiki, 第二代wiki. 它里面使用的 velocity 模板语言对j2ee开发相当有参考价值, ...
- CentOS7 network
- 让MySQL支持中文
这两天在学习webpy,把webpy的一个blog例子扒下来学习一下,默认创建的table当存入中文的时候是乱码,研究了一下这个问题. 1,创建table的时候就使用utf8编码 举个例子: crea ...
- sql数据库delete删除后怎么恢复,这是网上找的答案。。希望大神验证指教一下
使用Log Explorer查看和恢复数据 Log Explorer 4.1.可用于SQL Server2005的日志查看工具 下载地址: http://download.csdn.net/sourc ...
- C#dll中无法找到c++dll中函数的入口
刚试验了一下,老是c#中的dll无法找到c++dll中的函数的入口: 暂时发现有俩个原因 1,没有用extern “C” _declspec(dllexport),导致c#无法找到入口. 2,在c++ ...
- url中的scheme
iPhone上URL Schemes的作用为应用程序提供了一个其他应用程序或者safari可以启动他的方法. --http://blog.sina.com.cn/s/blog_5673c12f0100 ...
- jquery checkbox选中状态
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- MFC子窗口和父窗口
转载声明: 本文转载自:http://www.cnblogs.com/BeyondTechnology/archive/2011/03/25/1995934.html 感谢BeyondTechnolo ...
- C++的优秀特性5:模版
(转载请注明原创于潘多拉盒子) C++是强类型语言,而且恐怕是强类型语言里面类型最严格的.这意味着:1. C++变量的类型在定义时就确定了:2. 该类型在后续的生命期中不会改变.比如: int n = ...