问题标签 [irq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
8819 浏览

linux - 如何确定 USB 设备的 IRQ 号?

我是驱动程序开发的新手。但是,我购买了一个 OSR USB FX2 学习套件,它带有用于 Windows 内核/用户模式驱动程序的示例代码。但是,我正在 Linux (Ubuntu 12) 中编写驱动程序。我已经成功地能够发送控制命令并从设备接收控制命令的返回。我还能够通过设备支持的 BULK OUT/IN 端点成功发送和读取数据。

我还没有完成一项实验。该设备具有以下端点:

我无法弄清楚如何找到中断 (IN)端点的IRQ 号。我了解如何使用以下方法安装 IRQ 处理程序:

并使用正确的函数原型编写处理程序。但是,我想知道如何找到设备中断的 IRQ 线路(IRQ 编号)?也就是如何确定上面request_irq函数中参数unsigned int irq的值应该是多少?我通读了“Linux 设备驱动程序,第三版”一书,如何确定并行端口的 IRQ 号。但是,这对 USB 是如何工作的,我将如何去探测或找出 USB 设备的这个数字应该是什么?

0 投票
1 回答
1935 浏览

linux - Linux 外部事件处理 - IRQ 与轮询 kthread

我正在将设备驱动程序从 QNX 移植到 Linux。在 QNX 中,旧驱动程序使用带有无限循环的 pthread 来监视中断的发生,而不是注册一个真正的中断处理程序。为了演示使用 register_irq() 代替专用轮询线程的功效,我在 Linux 中编写了两个驱动程序。每个的相关代码如下所示,问题在底部。

中断请求

编写处理程序

注册处理程序

轮询线程

编写线程函数

开始线程

问题

当我在示波器上放置两条迹线时——一条监控卡的数字输入(将触发中断),一条监控卡的数字输出(将对中断作出反应),我可以测量对事件的反应时间。

第一个“正确的”方法,注册一个 IRQ,大约需要 80 微秒。

第二种方法,运行一个无限线程,大约需要 15-30 微秒。

是什么赋予了?第一个的好处是它不会浪费太多的处理能力,但是为什么响应时间会受到如此严重的影响呢?真的,有这个投票线程有多糟糕?一个人如何去调查并最终证明轮询线程对 CPU 造成的额外负担?

谢谢你的时间!

最好的

斯科特

0 投票
0 回答
179 浏览

linux - 是否有可能实现网络适配器的中断出现在不同的 CPU 内核 x86_64 上?

当我实现任何运行 Linux(Intel Xeon x86_64)的网络服务器时,瓶颈通常变成一个单一且始终相同的 CPU 核心(中断总是发生在同一个 (CPU0) 核心上),在该核心上出现中断(IRQ)调用网卡驱动程序代码的网卡。是否有可能以某种方式实现中断出现在不同的处理器内核上(通过随机或循环),而不是单个,从而平衡负载?

但是:如果在单个内核上没有完成硬件中断之前,它不可能是由不同的内核引起的,即使我们在中断完成之前以某种方式完成了网络设备的工作,那么:

我希望每次在不同的内核上发生中断时,然后我与网卡交换数据,堆积与给定 CPU 内核(带有该内核索引的缓冲区)有关的内存数据,然后结束中断(IRQ) 代码。所以,我想避免线程间同步。每个内核可以执行中断网卡,也可以只将一个线程绑定到具有实时优先级的内核。我使用 1P-1C 容器,它的所有缓存线始终只属于单个内核的 L1/L2。而且我们不需要缓存同步(CPUx L1/L2 <-> L3 <-> CPUy L1/L2),这给了我们 10 倍的速度。

或者更好地使用软IRQ而不是硬件IRQ?

0 投票
0 回答
119 浏览

linux - 如何设置 Linux irq 的 state_use_accessors?

struct irq_data有 的成员state_use_accessors,并且linux/irq.h其中有一些静态函数使用 state_use_accessors 来获取状态。

我有几个问题:1、何时何地state_use_accessors设置值?我grep的源代码,但没有找到。

2、使用的函数state_use_accessors是静态的,比如

我可以在自己的代码中使用实现吗?

谢谢~

亲切的问候比尔王

0 投票
1 回答
898 浏览

c - ARM单核简单高效的调度实现

我想设计和实现一个裸机、类似操作系统的 简单安全调度程序

该机制应处理 IRQ 上下文(USB 和 SDH),其中 3-4 个主子例程同时操作 USB 和 SDH 控制器,并且都具有一定的 CPU 使用率。

ARM cortex A12 单核最好和最有效的方向是什么,以实现安全调度机制运行所有子例程(全部在特权模式下)并且可以处理 IRQ 上下文?

0 投票
1 回答
3442 浏览

linux-kernel - request_threaded_irq 的“处理程序函数”中的 I2c 读取和写入操作如何影响整个驱动程序。?

我有一个带有 request_threaded_irq 的处理函数和线程函数的驱动程序代码,类似于:

我对上述实施几乎没有疑问。

  1. “handler fn”中的 2 i2c 操作会花费大量时间吗?

  2. 我是否需要在“handler fn”原子中进行位操作?

  3. 我是否应该将执行到“启用设备中断”的操作从“线程 fn”移动到“处理程序 fn”(这将花费我 4 次 i2c 操作和一位操作)?- 有可能我可能会根据上述代码实现错过中断。

  4. 如果我这样做(根据问题 3)。它如何影响其他设备中断。(因为我基本怀疑硬 IRQ 上下文中的“处理程序 fn”是否在禁用中断的情况下运行

请为我提供上述情况的最佳解决方案。

提前致谢。

0 投票
2 回答
7271 浏览

linux-kernel - do_IRQ 中的中断向量和 irq 映射

我正在使用 Linux 3.6.0 开发 x86 系统。对于一些实验,我需要知道 IRQ 是如何映射到向量的。我从很多书中了解到,向量 0x0 到 0x20 用于陷阱和异常,然后从向量 0x20 开始用于外部设备中断。而这也在源代码Linux/arch/x86/include/asm/irq_vectors.h中定义

但是,我感到困惑的是,当我检查 do_IRQ 函数时, http ://lxr.linux.no/linux+v3.6/arch/x86/kernel/irq.c#L181 我发现 IRQ 是由查找“vector_irq”数组:

通过使用 printk 检测代码,我得到的向量-irq 映射如下所示,我不知道为什么这是映射。我虽然映射应该是(irq + 0x20 = vector),但似乎不是这样。

但我的输出是:

顺便说一句,这些 irq 是我启用了 MSIX 的 10GB 以太网卡。谁能给我一些关于为什么这是映射的想法?制作这种映射的规则是什么?

谢谢。威廉

0 投票
1 回答
1516 浏览

linux-kernel - 可以使用 MSI-X 设备设置 IRQ 关联(Linux)吗?

我过去在 Linux 上通过设置 proc 文件的值来设置 IRQ 关联。[1] 但是,我注意到,当我在将 MSI-X 用于我想为 NIC 设置亲和性的设备 (PCIe) 的系统上执行此操作时,/proc/interrupt 计数器会为 IRQ 的每个核心递增,并且不适用于我为其设置的单核。在非 MSI-X 系统中,指定内核响应中断的位置。

我正在使用 Linux 内核 3.11。

简短:可以为使用 MSI-X 中断的设备设置 IRQ 关联吗?

[1] https://www.kernel.org/doc/Documentation/IRQ-affinity.txt

0 投票
1 回答
710 浏览

linux - Linux 中的共享 IRQ

当多个注册的中断服务程序共享一条 IRQ 线时,什么决定了中断线被提升时 ISR 的执行顺序?

0 投票
1 回答
96 浏览

xbee - Digi S2B 模块,按钮中断程序

我正在使用带有 Digi Extension 的 Freescale CodeWarrior IDE 设计一个应用程序。我已经创建了示例应用程序并使用了它们。这工作得很好,但我在 IRQ 上遇到了一些问题。如果我使用 IRQ 组件,我并不总是进入中断例程。我的意思是当我按下按钮时,我并不总是进入 myButton_irq() 函数。知道为什么吗?你有同样的问题吗?

现在我正在尝试其他应用程序,按钮反应变得越来越低效......

提前致谢,

干杯!