/proc/interrupts

2023-05-16

/proc/interrupts中的字段依次是逻辑中断号、中断在各CPU上发生的次数,中断所属父设备名称、硬件中断号、中断触发方式(电平或边沿)、中断名称
/proc/interrupts的具体实现查看代码kernel/irq/proc.c中函数show_interrupts
在这里插入图片描述

添加一个中断函数后/proc/interrupts的变化

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/kthread.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/device.h>
#include <linux/gpio.h>
#include <linux/interrupt.h>
#include <linux/gpio/driver.h>
#include <linux/gpio/consumer.h>

int gpio_index;

static irqreturn_t handler_gpio(int irq, void *arg)
{
        printk("%s\n", __func__);

        return IRQ_HANDLED;
}

static int __init gpio_test_int_init(void)
{
        int irq;
        int ret;

        /* gpio 504 correspond to P0_4/EXP_IO2 of PCA6416 */
        gpio_index = 504;
        if(gpio_is_valid(gpio_index)) {
                ret = gpio_request_one(gpio_index, GPIOF_DIR_IN, "tca6416");
                if (ret) {
                        printk("gpio_request for %d fail\n", gpio_index);
                        return -EIO;
                }

                irq = gpio_to_irq(gpio_index);
                printk("irq is %d\n", irq);

                ret = request_any_context_irq(irq, handler_gpio,
                        IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | IRQF_SHARED,
                        "gpio_x", &gpio_index);
                if (ret < 0) {
                        printk("request_irq for %d fail, ret=%d\n", irq, ret);
                        goto err;
                }
        } else {
                printk("gpio %d is not valid, do nothing\n", gpio_index);
        }

        printk("%s ok\n", __func__);
        return 0;

err:
        gpio_free(gpio_index);
        return -1;
}

static void __exit gpio_test_int_exit(void)
{
        int irq = gpio_to_irq(gpio_index);

        free_irq(irq, &gpio_index);
        gpio_free(gpio_index);

        printk("%s\n", __func__);
}
module_init(gpio_test_int_init);
module_exit(gpio_test_int_exit);
MODULE_AUTHOR("Frank Wang <lei.wang_15@nxp.com>");
MODULE_DESCRIPTION("pca6416 gpio test driver");
MODULE_LICENSE("GPL v2");

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

/proc/interrupts 的相关文章

随机推荐

  • Hadoop HDFS 副本机制

    Data Replication HDFS is designed to reliably store very large files across machines in a large cluster It stores each f
  • Apache Spark 3.0:全新功能知多少

    Spark3 0解决了超过3400个JIRAs xff0c 历时一年多 xff0c 是整个社区集体智慧的成果 Spark SQL和 Spark Cores是其中的核心模块 xff0c 其余模块如PySpark等模块均是建立在两者之上 Spa
  • Spark优化篇:动态内存管理

    Spark内存管理分为静态内存管理和统一内存管理 xff0c Spark1 6之前使用的是静态内存管理 xff0c Spark1 6之后的版本默认使用的是统一内存管理 动态内存机制图 xff1a 内存估算 xff1a Other Memor
  • Spark优化篇:RBO/CBO

    在Spark1 0中所有的Catalyst Optimizer都是基于规则 rule 优化的 为了产生比较好的查询规 则 xff0c 优化器需要理解数据的特性 xff0c 于是在Spark2 0中引入了基于代价的优化器 xff08 cost
  • Spark优化篇:数据倾斜解决

    数据倾斜是指我们在并行进行数据处理的时候 xff0c 由于数据散列引起Spark的单个Partition的分布不均 xff0c 导致大量的数据集中分布到一台或者几台计算节点上 xff0c 导致处理速度远低于平均计算速度 xff0c 从而拖延
  • Apache Flink 作业图 JobGraph 与执行图 ExecutionGraph

    由 Flink 程序直接映射成的数据流图 xff08 dataflow graph xff09 xff0c 也被称为逻辑流图 xff08 logical StreamGraph xff09 到具体执行环节时 xff0c Flink 需要进一
  • Apache Flink 任务 Tasks 和任务槽 Task Slots

    目录 任务槽 xff08 Task Slots xff09 任务槽数量的设置 任务对任务槽的共享 任务槽和并行度的关系 任务槽 xff08 Task Slots xff09 Flink 中每一个 worker 也就是 TaskManager
  • Flink 水位线结合窗口进行KeyBy、Reduce案例

    水位线 xff08 Watermark xff09 和窗口 xff08 Window xff09 Watermark 在事件时间语义下 xff0c 我们不依赖系统时间 xff0c 而是基于数据自带的时间戳去定义了一个时钟 xff0c 用来表
  • UML中的五种关系

    UML中的关系 xff08 Relationships xff09 主要包括5种 xff1a 关联关系 聚合关系 依赖关系 泛化关系和实现关系 关联 xff08 Association xff09 关系 关联关系是一种结构化的关系 xff0
  • 摄像头常用接口MIPI,DVP原理图接口定义

    摄像头常用接口 xff1a USB是串行通用串行总线 xff08 Universal Serial Bus xff09 的简称 xff0c 电脑摄像头接口是USB接口 xff0c MIPI MIPI是移动行业处理器接口 xff08 Mobi
  • 内核current指针

    通过current指针获取当前进程信息 current其实一个struct task struct指针 xff0c 指向当前进程 struct task struct task又是struct thread info的一个成员变量 thre
  • DMA(四) - DMA_API_DEBUG

    DMA API DEBUG 为了debug驱动程序及发现使用DMA API时的bug xff0c 检测代码可以编译到kernel中 xff0c 它们可以告诉开发 者那些违规行为 如果你的体系结构支持 xff0c 你可以选择编译选项 Enab
  • CONFIG_KALLSYMS_ALL

    内核配置 在2 6内核中 xff0c 为了更好地调试内核 xff0c 引入了kallsyms kallsyms抽取了内核用到的所有函数地址 全局的 静态的 和非栈数据变量地址 xff0c 生成一个数据块 xff0c 作为只读数据链接进ker
  • sysctl

    sysctl命令用于运行时配置内核参数 xff0c 这些参数位于 proc sys 目录 xff0c 可以使用sysctl修改系统变量 xff0c 也可以通过编辑 etc sysctl conf文件来修改系统变量 sysctl 选项 参数
  • function declaration isn't a prototype解决办法

    对以上程序 xff0c 在编译驱动的时候会出现以下warning 在网上查到解决办法是 xff1a 即使函数括号内没有任何参数 xff0c 也要加一个void类型 xff0c 来避免这种warning xff1a 解决如下 xff1a
  • i2c信号的ACK与NACK

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp 我们平时在调试I2C的时候可能很少去关注NACK信号 只知道如果Master发送数据 MSB先发 LSB后发 连续发送一个字节 8个bit 之后Slave会回复一个ACK
  • ubuntu的recovery mode

    偶尔会遇到Ubuntu无法正常启动的情况 xff0c 这时候需修改某些文件让系统正常启动 xff0c 如果直接进入 recovery 模式 xff0c 默认是文件权限只读 xff0c 无法修改文件 这时我们需要进入recovery 的单用户
  • oprofile库安装与使用

    一 概述 oprofile库是linux平台上的一个功能强大的性能分析工具 xff0c 支持两种采样方式 xff1a 基于事件的采样与基于时间的采样 1 xff09 基于事件的采样 xff1a oprofile只记录特定事件 xff08 比
  • 超声波模块

    HC SR04 简介 HC SR04超声波模块可提供2cm 400cm的距离感测功能 xff0c 测量精度可以达到3mm 模块包括超声波发射器 xff0c 接收器与控制电路 基本工作原理 1 采用Trig引脚触发 xff0c 给至少10us
  • /proc/interrupts

    proc interrupts中的字段依次是逻辑中断号 中断在各CPU上发生的次数 xff0c 中断所属父设备名称 硬件中断号 中断触发方式 电平或边沿 中断名称 proc interrupts的具体实现查看代码kernel irq pro