中断包括软中断和硬中断两种,中断是一种异步I/O机制,即中断可以发生在任意时间点。

1、硬中断

硬件中断包括触发中断和处理中断两部分,而维系两者的是中断号,中断号是一种硬件资源。

1.1、注册和释放中断

#include <linux/interrupt.h>

注册中断处理函数,将中断号与中断处理函数绑定在一起,成功返回0,失败返回负错误码
int request_irq(
unsigned int irq,
irqreturn_t (*handler)(int irq, void *dev_id, struct pt_regs *regs),
unsigned long flags,
const char *dev_name,
void *dev_id
);
参数说明:
irq - 中断号
handler - 中断服务函数
flags - SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM
dev_name - 设备驱动名称,在/proc/interrupts中可以显示设备驱动和中断号的对应关系
dev_id - 用作共享中断号的指针,如果中断号没有被共享,置为NULL 释放中断号
void free_irq(unsigned int irq, void *dev_id);

1.2、使能和禁止中断

#include <asm/irq.h>

使能中断
void enable_irq(int irq); 等待当前执行的中断处理完成,然后禁止中断
void disable_irq(int irq); 不等待当前执行的中断处理完成,立即禁止中断
void disable_irq_nosync(int irq); 调用任一函数可能更新在PIC中特定IRQ的掩码,从而使能或者禁止特定中断。 #include <asm/system.h> 禁止所有中断,并保存中断状态
void local_irq_save(unsigned long flags); 禁止所有中断,不保存中断状态
void local_irq_disable(void); 恢复所有中断,并恢复中断状态
void local_irq_restore(unsigned long flags); 恢复所有中断
void local_irq_enable(void);

1.3、中断顶半部和底半部

tasklet和工作队列,待补充

Linux驱动开发8——中断处理的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  3. 嵌入式Linux驱动开发日记

    嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...

  4. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  5. 【转】linux驱动开发的经典书籍

    原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书 ...

  6. Linux驱动开发 -- 打开dev_dbg()

    Linux驱动开发 -- 打开dev_dbg() -- :: 分类: LINUX linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KER ...

  7. Linux驱动开发学习的一些必要步骤

      1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, ...

  8. 驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  9. Linux内核(17) - 高效学习Linux驱动开发

    这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到 ...

随机推荐

  1. sqlite3中 timestamp使用

    timestamp使用 一. timestamp两种属性:自动初始化: 此行为只在第一次写入数据时,怎么把时间设为当前时间. (DEFAULT CURRENT_TIMESTAMP)自动更新: 此行为在 ...

  2. springboot学习1

    gradle环境配置 https://www.w3cschool.cn/gradle/ctgm1htw.html Spring profile 多环境配置管理 参考:https://www.cnblo ...

  3. 将shell脚本的执行过程和执行结果导入到log文件中

    [root@localhost scripts]# vim ping.sh #!/bin/bash set -x ##分步执行 exec &> /tmp/log.txt ##脚本执行的过 ...

  4. Win10+Linux(CentOS) 双系统安装教程--踩坑实录

    最近心血来潮想给自己的笔记本装一套linux系统作为开发环境, 说干就干,首先先收集一下现在linux主流版本, 貌似现在市场上应用服务器比较多的是redhat相关产品,而ubuntu的优势在于它庞大 ...

  5. 彻底解决 TypeScript 报错:“无法重新声明块范围变量”的问题

    背景 当使用 TypeScript + TSlint + Babel + Jest 搭建开发环境时,在开发过程中偶尔会被 IDE 提示「无法重新声明块范围变量」,从而导致编译出错,报错图示如下: 相关 ...

  6. ios银行卡号加入* 并四个一个空格

    +(NSString *)getNewBankNumWitOldBankNum:(NSString *)bankNum{    NSMutableString *mutableStr;    if ( ...

  7. 跳跃表-原理及Java实现

    跳跃表-原理及Java实现 引言: 上周现场面试阿里巴巴研发工程师终面,被问到如何让链表的元素查询接近线性时间.笔者苦思良久,缴械投降.面试官告知回去可以看一下跳跃表,遂出此文. 跳跃表的引入 我们知 ...

  8. 【HDU1011】Starship Troopers

    题目大意:给定一棵 N 个节点的无根树,每个节点有一个重量和一个价值,现给出一些单位,每个单位可以接受 20 个重量单位,求如何分配这些单位,使得获得的价值最大. 题解:dp 好题qwq..真的毒瘤. ...

  9. big.js常用方法

    官网api:http://mikemcl.github.io/big.js/ +:minus.minus(n) ⇒ Big  %:mod.mod(n) ⇒ Big -:plus.plus(n) ⇒ B ...

  10. 【Linux】CentOS6上redis安装

    1.官网下载安装包 https://redis.io 2.解压 tar -zxvf xxxx.tar.gz 3.编译安装 进入解压后的目录后 make 出现以下内容表示make成功 Hint: It' ...