Linux驱动知识:中断

These symbols related to interrupt management were introduced in this chapter:

#include <linux/interrupt.h>int request_irq(unsigned int irq, irqreturn_t (*handler)( ), unsigned long flags, const char *dev_name, void *dev_id); void free_irq(unsigned int irq, void *dev_id);

Calls that register and unregister an interrupt handler.

dev_name为显示在/proc/interrupts中的名字

dev_id为回调中断处理程序时所给的参数,通常为本地dev结构的地址指针。

#include <linux/irq.h.h>
int can_request_irq(unsigned int irq, unsigned long flags);

This function, available on the i386 and x86_64 architectures, returns a nonzero value if an attempt to allocate the given interrupt line succeeds.

#include <asm/signal.h>

SA_INTERRUPT
SA_SHIRQ
SA_SAMPLE_RANDOM

Flags for request_irq. SA_INTERRUPT requests installation of a fast handler (as opposed to a slow one). SA_SHIRQ installs a shared handler, and the third flag asserts that interrupt timestamps can be used to generate system entropy.

Modern hardware, of course, has been designed to allow the sharing of interrupts; the PCI bus requires it.

/proc/interrupts

/proc/stat

Filesystem nodes that report information about hardware interrupts and installed handlers.

unsigned long probe_irq_on(void);
int probe_irq_off(unsigned long);

Functions used by the driver when it has to probe to determine which interrupt line is being used by a device. The result of probe_irq_onmust be passed back to probe_irq_off after the interrupt has been generated. The return value of probe_irq_off is the detected interrupt number.

The programmer should be careful to enable interrupts on the device after the call to probe_irq_on and to disable them before callingprobe_irq_off

IRQ_NONE
IRQ_HANDLED
IRQ_RETVAL(int x)

The possible return values from an interrupt handler, indicating whether an actual interrupt from the device was present.

void disable_irq(int irq);        //关中断且等待当前的中断处理程序完成
void disable_irq_nosync(int irq); //不等待,有风险
void enable_irq(int irq);

A driver can enable and disable interrupt reporting. If the hardware tries to generate an interrupt while interrupts are disabled, the interrupt is lost forever. A driver using a shared handler must not use these functions.

void local_irq_save(unsigned long flags);
void local_irq_restore(unsigned long flags);

Use local_irq_save to disable interrupts on the local processor and remember their previous state. The flags can be passed to local_irq_restore to restore the previous interrupt state.

void local_irq_disable(void);
void local_irq_enable(void);

Functions that unconditionally disable and enable interrupts on the current processor.

原文地址:https://www.cnblogs.com/realplay/p/10912696.html

时间: 2024-11-09 01:39:16

Linux驱动知识:中断的相关文章

linux驱动之中断方式获取键值

linux驱动之中断方式获取键值 ------------------------------------------------------------------------------------------------------------------------------------------------------ 回想在单片机下的中断处理 分辨是哪个中断 调用处理函数 清中断 --------------------------------------------------

Linux驱动设计—— 中断与时钟

中断和时钟技术可以提升驱动程序的效率 中断 中断在Linux中的实现 通常情况下,一个驱动程序只需要申请中断,并添加中断处理函数就可以了,中断的到达和中断函数的调用都是内核实现框架完成的.所以程序员只要保证申请了正确的中断号及编写了正确的中断处理函数即可. 中断的宏观分类 1.硬中断 由系统硬件产生的中断.系统硬件通常引起外部事件.外部事件事件具有随机性和突发性,因此硬件中断也具有随机性和突发性. 2.软中断 软中断是执行中断指令时产生的.软中断不用外设施加中断请求信号,因此软中断的发生不是随机

Linux驱动知识:Linux Device Model

Kobjects #include <linux/kobject.h> //The include file containing definitions for kobjects, related structures, and functions. void kobject_init(struct kobject *kobj); int kobject_set_name(struct kobject *kobj, const char *format, ...); //Functions

Linux kernel中断子系统之(五):驱动申请中断API

一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threaded interrupt handler)的基础知识,这些在第二章描述.第三章主要描述了驱动申请 interrupt line接口API request_threaded_irq的规格.第四章是进入request_threaded_irq的实现细节,分析整个代码的执行过程. 二.和中断相关的lin

Linux中断 - 驱动申请中断API

一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threaded interrupt handler)的基础知识,这些在第二章描述.第三章主要描述了驱动申请 interrupt line接口API request_threaded_irq的规格.第四章是进入request_threaded_irq的实现细节,分析整个代码的执行过程. 二.和中断相关的lin

【Linux驱动】文件描述符以及相关知识

1.文件描述符 Linux操作系统中,几乎所有的设备都被抽象成为设备文件.因此,当我们想对设备进行操作的时候可以直接去操作其相应的设备文件.设备文件即是文件,要想对文件进行操作,无非就是:打开文件.关闭文件.写入数据.读出数据等,它们分别对应的函数有open(),close(),write(),read(),就以其中的open()函数做一个分析.open函数的作用是打开一个文件. (1)它的定义:int open( const char * pathname, int flags); int o

Linux驱动开发之 三 (那些必须要了解的硬件知识 之 存储器篇)

Linux驱动开发之 三 (那些必须要了解的硬件知识 之 存储器篇) 本文重点学习存储器相关的基本知识,网络上对RAM,ROM,FLASH等有非常详细的介绍,老谢将这些知识点摘抄整理并加以注释如下.这个整理的过程也是加深记忆的过程. 1.什么是内存 在计算机的组成结构中,有一个很重要的部分,就是存储器.存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作.存储器的种类很多,按其用途可分为主存储器和辅助存储器,主存储器又称内存储器(简称内存),辅助存储器又称

Linux驱动开发之 四 (那些必须要了解的硬件知识 之 串口)

Linux驱动开发之 四 (那些必须要了解的硬件知识 之 串口) 在前面的文章中,我们了解处理器.存储器,在这篇文章中老谢想和大家聊聊在实际项目开发过程中串口的基本知识和作用. 一.串口简介 如果要非常细致的了解串口的定义,直接问度娘是最快的方式.老谢在这里就不再赘述.大致描述如下: RS-232协议,相比RS-422,RS-285有着更为广泛的应用,特别是嵌入式开发过程中,应用极为广泛,可谓工程师的眼睛.工程师们靠UART tool了解系统的运行状态.调试以及处理相关问题,而这一系列的信息交互

Linux驱动开发之 六 (那些必须要了解的硬件知识 之 仪器篇)

Linux驱动开发之 六 (那些必须要了解的硬件知识 之 仪器篇) 一.前言 在之前的文章中,老谢已经分享了不少关于嵌入式系统开发过程中必须要了解的硬件知识.作为这一小节的结束(哎呀,终于要结束了),老谢还想和大家聊聊"仪器".本文中老谢不聊仪器的具体使用方法.原理等.只想聊点轻松的,老谢结合自己的实际工作,以图文结合的方式,简单聊聊工作中使用到的仪器. 实话实说,前几篇文章基本无技术含量,包括本文.老谢坚持写这几篇的用意是: Linux驱动开发,必须以此为基础: 通过写博客的方式,让