linux irq 接口,Linux内核API irq_set_irq_type

article/2025/11/7 7:06:16

irq_set_irq_type函数功能描述:此函数用于设置中断处理函数触发的类型,被操作的中断描述符保存在数组irq_desc中,对应的下标为参数irq的值,设置的中断触发类型为参数type所代表的类型。

irq_set_irq_type文件包含

irq_set_irq_type函数定义

在内核源码中的位置:linux-3.19.3/kernel/irq/chip.c

函数定义格式:

irq_set_irq_type输入参数说明

参数 unsigned int irq是对应的中断号,与数组irq_desc的下标相对应,数组的大小为16640。

参数unsigned int type是系统定义的中断触发类型,定义见文件linux-3.19.3/include/linux/irq.h,可能的取值定义如下:

IRQ_TYPE_NONE 0x00000000系统默认的没有明确指明类型的触发模式

IRQ_TYPE_EDGE_RISING 0x00000001上升沿触发

IRQ_TYPE_EDGE_FALLING 0x00000002下降沿触发

IRQ_TYPE_EDGE_BOTH (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)上升沿下降沿两种触发都行

IRQ_TYPE_LEVEL_HIGH 0x00000004高电平触发

IRQ_TYPE_LEVEL_LOW 0x00000008低电平触发

IRQ_TYPE_SENSE_MASK 0x0000000f以上任何一种条件

IRQ_TYPE_DEFAULT IRQ_TYPE_SENSE_MASK以上任何一种条件

IRQ_TYPE_PROBE 0x00000010在进程中查询

irq_set_irq_type返回参数说明

函数的返回结果是int型变量,返回0或者负数,如果返回结果是负数,说明设置中断触发类型失败;如果返回结果是0,有四种情况:

设置中断触发类型成功;

传入的中断触发类型参数是IRQ_TYPE_NONE,如果传入此参数,函数不会更改中断的触发类型;

数组中与irq对应的元素的chip字段的值为NULL;

数组中与irq对应的元素的chip字段的值不为NULL,但chip字段的set_type字段的值为NULL。

irq_set_irq_type实例解析

编写测试文件:irq_set_irq_type.c

头文件引用及全局变量定义:

中断处理函数及中断线程函数定义:

模块加载函数定义:

模块退出函数定义:

模块加载、退出函数调用:

实例运行结果及分析:

编译模块,执行命令insmod irq_set_irq_type.ko插入内核模块,然后输入命令dmesg -c查看内核输出信息,出现如图所示的信息。

c51c0a864ed274a4a56fe00c15b4d23e.png

结果分析:

由图可以看出函数irq_set_irq_type( )的返回值是0,并且中断处理函数执行一次。但返回0并不代表设置中断触发类型成功,因为动态申请的中断描述符其字段chip的值为NULL,所以返回0是必然。

如果想设置中断的类型成功,必须满足以下条件:

中断描述符存在数组irq_desc中;

参数type不是IRQ_TYPE_NONE;

中断描述符的chip字段的值不为NULL;

中断描述符的字段chip的字段set_type的值不为NULL。

但是满足以上条件,也不一定能设置成功,还需要看字段set_type代表的函数的实现。


http://chatgpt.dhexx.cn/article/VswosUFr.shtml

相关文章

Linux Irq domain

本节学习下什么是irq domain, 以及irq domain的作用。可以参考内核文档IRQ-domain.txt 为什么引入IRQ-Domain 当早期的系统只存在一个interrupt-controller的时候,而且中断数目也不多的时候,一个很简单的做法就是一个中断号对应到interrupt-contoller的…

linux IRQ Management(四)- IRQ Domain

了解IRQ Domain(中断控制器) 1.如何理解中断号? 每个IRQ同时有"irq"和"hwirq"两个编号。 "hwirq"是硬件中断号(物理中断号),即芯片手册上写的号码,Interrupt controller用hwirq来标识…

linux设备驱动:中断处理中的hardirq与softirq详细流程

中断处理的整体框架: 内核用于标识中断上下文(in_interrupt())的变量preempt_count的布局: 按照x86处理器在外部中断发生时的硬件逻辑,在do_IRQ被调用时,处理器已经屏蔽了对外部中断的响应。在图中我们看 到中断的处理大体上被…

Java 字段封装快捷键

快捷键:shift alt s 选择:

Java封装阿里云对象存储OSS

Java封装阿里云对象存储OSS 阿里云对象存储OSS官网 本篇博客简单封装了阿里云的OSS存储中的建立连接;本地文件,输入流和URL三种方式上传文件,获取文件的输入流,删除文件,获取所有文件列表等功能。 OSS官方Api OSSp…

java 枚举 封装操作方法

前言: 由于刚转java项目,所以对于java语言比较陌生,尤其是lambda和一些诸如(一个java文件只能有一个public class)等等的零散知识点之类。。。 使我觉得就语言的层级来说。.net真的超越java不是一星半点。奈何.net跨…

Java封装和封装的案例

Java封装和封装的案例 目录 一、Java封装知识点简介 二、Java程序中的包 三、static关键字、代码块 四、封装的综合应用案例: 一、Java封装知识点简介 1、面向对象三大特性之封装的概念: 隐藏类的某些内部细节,不允许外部程序直接访问…

Java的封装方法

在面向对象程式设计方法中,封装(英文名称:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的…

Java封装如何封装 封装的好处是什么?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、封装的作用是什么?二、封装的好处三、封装的步骤 1.引入库2.private的应用总结 前言 我要看电视,只需要按一下开关和换台就可以了。…

15、JAVA入门——封装

目录 一、封装 1、封装概述 2、封装的步骤 二、Java里的包 1、包的概述 2、包的定义 3、包的使用 4、注意事项 三、Java访问修饰符 1、类和类成员的访问控制 2、类的访问修饰符 3、类成员的访问修饰符 四、static关键字 1、static特点 2、static修饰属性 3、static修饰方法 4、…

初学java封装

封装 初识java封装 封装的用处: 1.提高程序的安全性,保护数据 2.隐藏代码的实现细节 3.统一接口 4.增加系统可维护性 这里创建一个类 public class Package {//属性私有private String name;//名字private int age; //年龄private int sex;//性别//1.…

java如何实现封装_java如何实现封装

Java中类的封装是如何实现的封装是将对象的信息隐藏在对象内部,禁止外部程序直接访问对象内部的属性和方法。 java封装类通过三个步骤实现: (1)修改属性的可见性,限制访问。 (2)设置属性的读取方法。 (3)在读取属性的方法中,添加对属性读取的限制。 Java中什么叫封装呢? 继…

java封装dll文件_java类封装成dll

1,建立测试类,注意英文注释部分,用汉语直接编译会乱码 public classHello {//native method is used for call other language procedure//if use chinese here then Compile would be gibberish public native voidprintHello();static{ Sys…

java之封装

1.封装 1. 封装 1.1 private关键字 private是一个修饰符,可以用来修饰成员(成员变量,成员方法) 被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用&…

【JavaScript】js中非常常见的面试题

文章目录 1、手动实现防抖和节流2、let、const、var 的区别3、箭头函数与普通函数区别4、Promise5、数据类型6、检测数据类型的常用方法1 .typeof2 . instanceof3 .constructor4 . 使用 Object.prototype.toString.call()检测对象类型⭐5 . 自己封装函数6、isArray 7、数组的常…

JS的100道经典面试题(一)只看这四篇就够了,收藏起来以后偷偷看

年轻人你不讲武德,耗子尾汁~~~ 总结就是为了形成自己的js知识网,提升自己,加油! 开始干 1、介绍js的基本数据类型   答: Undefined、Null、Boolean、Number、String 2、js有哪些内置对象?  答&…

大前端JS部分基础面试题(含答案)

1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Null、Boolean、Number、String 值类型:数值、布尔值、null、undefined。 引用类型:对象、数组、函数。 堆栈数据结构:是一种支…

Js面试题__附答案

1、什么是JavaScript?(这是基本题,对很多程序员来说也是送分题!) JavaScript是客户端和服务器端脚本语言,可以插入到HTML页面中,并且是目前较热门的Web开发语言。同时,JavaScript也…

js 变量及作用域经典面试题

function Foo() {getName function () { alert (1); };return this; } Foo.getName function () { alert (2);}; Foo.prototype.getName function () { alert (3);}; var getName function () { alert (4);}; function getName() { alert (5);}//请写出以下输出结果&#x…

前端面试题集锦——JavaScript

JavaScript 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。 队列先进先出,栈先进后出。 栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入,在表头一端进行删除 栈和…