22得票3回答
如何防止g++优化掉一个由IRQ可以更改的变量控制的循环?

考虑以下代码片段:unsigned global; while(global); 在一个由IRQ调用的函数中,修改了global变量。然而,g++编译器移除了“是否不为零”的测试,并将while循环转换成无限循环。 禁用编译器优化可以解决问题,但C++是否提供了一种语言构造来解决这个问题呢?

13得票2回答
CPU如何查找ISR并区分设备

我首先要分享的是我所知道的一切 - 就是完全的混乱。关于这个主题有几个不同的问题,所以请不要感到困惑 :). 1) 要找到ISR,CPU需要提供一个中断号。在x86机器(286/386及以上版本)中,有一个包含ISRs的IVT;每个条目的大小为4字节。因此,我们需要将中断号乘以4来找到ISR...

12得票2回答
当两个中断同时发生在Linux内核中会发生什么?

当两个中断同时发生在Linux内核中会发生什么情况? 如果处理器有多个CPU,这些中断可以同时运行在不同的CPU核心上。

9得票1回答
x86内核中的键盘IRQ

我希望通过编写一个非常简单的内核来学习。在阅读了大量关于PIC和x86架构中IRQ的文章后,我发现IRQ1是键盘处理程序。我正在使用以下代码打印所按下的键: #include "port_io.h" #define IDT_SIZE 256 #define PIC_1_CTRL 0x20 ...

9得票2回答
设置中断请求映射

我正在学习一些教程和参考资料,试图设置我的内核。在一个教程中,我遇到了一些不熟悉的代码,而且教程并没有解释它。我被告知这段代码将 16个IRQ(0-15)映射到ISR位置32-47: void irq_remap(void) { outportb(0x20, 0x11); o...

8得票1回答
对于共享的中断线,我该如何找到要使用的中断处理程序?

对于一个共享的中断线,我可以有多个中断处理程序。内核会按顺序调用特定共享线上的所有处理程序。据我所知,每个处理程序在被调用时都会通知内核它是否是正确的处理程序。 我的问题是如何确定这一点,它是通过检查告诉特定设备状态的内存映射寄存器还是其他硬件机制?处理程序如何知道相应的设备确实是发出中断的...

8得票2回答
什么是Linux中的链式中断,它们何时需要使用?

什么是链接中断?chained_irq_enter和chained_irq_exit是做什么的?因为在中断发生后,IRQ线会被禁用,但chained_irq_enter调用与屏蔽中断相关的函数。如果该行已经被禁用,为什么还要屏蔽中断?

8得票1回答
RISC-V中断处理流程

我正在寻找有关RISC-V处理器如何处理中断请求的信息。 我查阅了指令集手册和互联网上的信息。这些信息主要解释了指令集,而对于处理中断的方式,它们通常被称为“程序员模型”。由于中断处理的某些部分不是通过指令来表达的,因此它们不太适用于关于指令集的文档中。明显地,在程序代码中没有任何地方出现跳...

7得票2回答
ixgbe: 设置RX/TX队列数量

我想设置由Intel 10G网卡使用的RX/TX队列数。让我解释一下原因: 我正在Dell R720系统上使用类型为X520的Intel 10G网卡,使用ixgbe版本3.6.7-k和Ubuntu 3.2.0-59内核。 我在机器上的24个核心中有4个运行网络应用程序。目前,该网卡正在使用...

7得票2回答
Linux PCI设备驱动程序 - 总线与内核中断处理程序的区别

我正在为Linux中的PCIe卡编写设备驱动程序。我尝试在我的驱动程序中使用中断。 在PCI配置寄存器(偏移量0x3C)的“IRQ线”部分阅读报告,该设备分配的IRQ线路是11。lspci -b -vv还报告说,我的设备的中断号是11。 这里有点奇怪...cat /sys/bus/pci/...