中断包括软中断和硬中断两种,中断是一种异步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. python中逐行打印

    方法一:readline函数 f = open("./code.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 ...

  2. UnknownPropertyException(Yii2)

    在class里面的rule有属性,但是没声明

  3. 使用consul

    eureka官方已经正式宣布:自2.0起不再维护该项目,并在github 项目wiki上放出了一段吓唬人的话: 大意就是:从2.x起,官方不会继续开发了,如果需要使用2.x,风险自负.但其实我觉得问题 ...

  4. Linux上安装JDK1.8,tomcat9,以及mysql8的步骤

    (该篇是在centos7上安装JDK1.8.0_201  tomcat9.0.16 和 mysql8.0.15) 一.安装JDK 方式一 1.首先,下载JDK(链接http://www.oracle. ...

  5. (转)linux chattr lsattr 命令

    转http://www.ha97.com/5172.html PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功 ...

  6. win 与Linux 的hosts文件地址

    win(phpstudy):C:/Windows/System32/drivers/etc/hosts linux:  /etc/hosts

  7. 用Maven搭建简单的SpringMVC框架

    本文会详细阐述如何用Maven搭建一个简单的SpringMVC框架 这里就不介绍SpringMVC框架了,咱们直接来搭建 第一步 创建一个Maven的web项目  这里有一个简单的方法 new一个Ma ...

  8. git 分支 版本回退

    本地回退: git reset --hard HEAD~ 回退后推送到远程: git push --force .

  9. java 死锁演示

    java 死锁演示 java死锁 模拟死锁生成 死锁是由多个线程竞争同一个资源导致 package com.feshfans; /** * 1. 本代码为展示 java 中死锁的产生 * 2. 死锁的 ...

  10. 【leetcode】1221. Split a String in Balanced Strings

    题目如下: Balanced strings are those who have equal quantity of 'L' and 'R' characters. Given a balanced ...