混杂设备也是一种字符设备,主设备号固定为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. cocos 自适应屏幕分辨率

    提供了三种适配策略:kResolutionNoBorder:超出屏幕的部分会被裁剪,两侧没有黑边,铺满屏幕,按图片原始比例显示,图片不变形.kResolutionShowAll:整个游戏界面是可见的, ...

  2. [翻译]Behavior-Driven Development (BDD)行为驱动开发(一)

    简单而言,BDD是一系列基于TDD的工具和方法集发展而来的开发模式,一般不认为是一种新的开发模式,而是作为TDD的补充.因此,首先对TDD的概念进行进行. 测试驱动开发(TDD) TDD模式采取的是迭 ...

  3. Connecting Physics Bodies

    [Connecting Physics Bodies] The kinds of joints you can create in Sprite Kit. You add or remove join ...

  4. 安装CiscoWorks LMS

    安装CiscoWorks LMS,需要安装5张光盘,CiscoWorks LMS的安装步骤比较简单,在这里只介绍需要的重要步骤. 1.安装CD One 将CiscoWorks 2000 LMS CD ...

  5. 手把手教你玩转SOCKET模型之重叠I/O篇(下)

    四.     实现重叠模型的步骤 作 了这么多的准备工作,费了这么多的笔墨,我们终于可以开始着手编码了.其实慢慢的你就会明白,要想透析重叠结构的内部原理也许是要费点功夫,但是只是学会 如何来使用它,却 ...

  6. hdoj 5328 Problems killer

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5328 #include<stdio.h> #include<algorithm> ...

  7. JDBC和JPA调用储存过程 接收存储过程有返回值

    ============jdbc==========================================--java代码:一个输出参数--String connURL = null;Con ...

  8. java提高数据库访问效率代码优化

    package com.jb.jubmis.comm; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQL ...

  9. 利用HTML5开发Android(1)---Android设备多分辨率的问题

    Android浏览器默认预览模式浏览 会缩小页面 WebView中则会以原始大小显示 Android浏览器和WebView默认为mdpi.hdpi相当于mdpi的1.5倍 ldpi相当于0.75倍 三 ...

  10. CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***”

    刚安装完CentOS,使用yum命令安装一些常用的软件,使用如下命令:yum –y install gcc. 提示如下错误信息: Loaded plugins: fastestmirror, refr ...