混杂设备也是一种字符设备,主设备号固定为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 混杂设备、外部中断和输入子系统的更多相关文章

  1. Linux混杂设备驱动

    1. Linux混杂设备驱动模型 ① 在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice).所有混杂设备形成一个链表, ...

  2. Linux混杂设备驱动学习

    Linux混杂设备是字符设备的一类,主要是混杂设备拥有相同的主设备号(10),但是次设备号是不同的.所有的混杂设备行程一个链表,对设备访问时内核更据次设备号查找到相应的混杂设备. 混杂设备用struc ...

  3. Linux驱动之一个简单的输入子系统程序编写

    的在Linux驱动之输入子系统简析已经分析过了输入子系统的构成,它是由设备层.核心层.事件层共同组成的.其中核心层提供一些设备层与事件层公用的函数,比如说注册函数.反注册函数.事件到来的处理函数等等: ...

  4. linux 混杂设备驱动之adc驱动

    linux2.6.30.4中,系统已经自带有了ADC通用驱动文件---arch/arm/plat-s3c24xx/adc.c,它是以平台驱动设备模型的架构来编写的,里面是一些比较通用稳定的代码,但是l ...

  5. 10. linux输入子系统/input 设备【转】

    转自:https://www.cnblogs.com/crmn/articles/6696819.html 按键事件信息之上报绝对事件信息之上报相对事件信息之上报功能键驱动编写多点触控事件的上报 只产 ...

  6. Linux输入子系统(转)

    Linux输入子系统(Input Subsystem) 1.1.input子系统概述 输入设备(如按键,键盘,触摸屏,鼠标等)是典型的字符设备,其一般的工作机制是低层在按键,触摸等动作发生时产生一个中 ...

  7. linux 输入子系统之电阻式触摸屏驱动

    一.输入子系统情景回忆ING...... 在Linux中,输入子系统是由输入子系统设备驱动层.输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成.其中设备 ...

  8. linux输入子系统(6)-input子系统介绍及结构图

    注:本系列转自: http://www.ourunix.org/post/290.html input子系统介绍         输入设备(如按键,键盘,触摸屏,鼠标,蜂鸣器等)是典型的字符设备,其一 ...

  9. linux 输入子系统(1)----系统概述

    输入设备的工作中,只是中断.读键值/坐标值是设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通用的,基于此,内核设计了input输入子系统,由核心层 ...

随机推荐

  1. Azure中的分布式1——多实例

    Azure中的WebRole和WorkerRole天然支持负载均衡,只需要简单配置一下即可,下面我以一个WebRole为例说明这一点. 创建一个项目类型为MVC4的WebRole 项目结构如下: 右键 ...

  2. 麒麟OS剽窃

    今年对于我们的IT行业来说可以算是耻辱的一年. 首先是“汉芯丑闻”,上海交大研制了一个所谓的国内第一个完全拥有自主知识产 权的DSP芯片(数字信号微处理器)——“汉芯”,研制人陈进教授以此领取政府一亿 ...

  3. hdu4421-Bit Magic(2-SAT)

    题意 根据图中公式由A[]构造B[][],现在给你B,问你存不存在一个数组A使之成立. 题解:对于每一位进行2-sat求解. 比赛半个小时时间,没做出来…… 一直T. 因为本身对算法不确定,所以也不知 ...

  4. Codeforces Round #367 (Div. 2) B. Interesting drink (模拟)

    Interesting drink 题目链接: http://codeforces.com/contest/706/problem/B Description Vasiliy likes to res ...

  5. Spring.Scheduling.Quartz的使用

    最近因使用Spring.Net框架而接触.了解到其与Quartz.Net的集成,即Spring.Scheduling.Quartz模块. Spring通过对Quartz.Net的封装,采用了sprin ...

  6. Codeforces 467C. George and Job (dp)

    题目链接:http://codeforces.com/contest/467/problem/C 求k个不重叠长m的连续子序列的最大和. dp[i][j]表示第i个数的位置个序列的最大和. 前缀和一下 ...

  7. ASP.NET MVC- HtmlHelper的用法

    在ASP.NET MVC框架中没有了自己的控件,页面显示完全就回到了写html代码的年代.还好在asp.net mvc框架中也有自带的HtmlHelper和UrlHelper两个帮助类.另外在MvcC ...

  8. Android 图标上面添加提醒使用开源UI类库 Viewbadger

    Viewbadger 1.BadgeView主要是继承了TextView,所以实际上就是一个TextView,底层放了一个label,可以自定义背景图,自定义背景颜色,是否显示,显示进入的动画效果以及 ...

  9. VC++ 6.0中实现三叉切分窗口与多视图 [转]

    一.引用 当用户需要同时对文当的不同部分进行编辑时,常常会用到切分窗口;这些窗口可以都是相同的视,或者一个窗口为列表视,而另一个为树型视图.应用程序框架有多种方式来表示多视图,切分窗口是其中的方式之一 ...

  10. canvas绘制直线和多边形基本操作

    <!DOCTYPE HTML> <html lang="en"> <body> <canvas id="canvas" ...