Linux kernel 如何阻止所有IRQ';短(5ms)帧数据传输期间的秒数

Linux kernel 如何阻止所有IRQ';短(5ms)帧数据传输期间的秒数,linux-kernel,interrupt-handling,irq,Linux Kernel,Interrupt Handling,Irq,我是一个硬件和设备驱动程序的老手,使用了更早的Linux版本进行硬件控制。我最近回到了使用嵌入式处理的Linux和设备控制游戏中,发现Linux世界发生了很多变化(更好)。然而,我正在努力解决一个硬件控制问题,该问题涉及一个非常快速的基于SPI的帧数据传输内核模块,该模块需要在短时间帧(5毫秒)内关闭所有中断,以确保数据帧的正确数据传输定时。在Linux的“旧时代”,人们会使用save_flags-cli()-sti()框架来禁用关键部分的中断。在新的(2.6.33及更新版本)Linux IRQ

我是一个硬件和设备驱动程序的老手,使用了更早的Linux版本进行硬件控制。我最近回到了使用嵌入式处理的Linux和设备控制游戏中,发现Linux世界发生了很多变化(更好)。然而,我正在努力解决一个硬件控制问题,该问题涉及一个非常快速的基于SPI的帧数据传输内核模块,该模块需要在短时间帧(5毫秒)内关闭所有中断,以确保数据帧的正确数据传输定时。在Linux的“旧时代”,人们会使用save_flags-cli()-sti()框架来禁用关键部分的中断。在新的(2.6.33及更新版本)Linux IRQ控制框架中实现这一点的最简单方法是什么


Scott

现代的等价物是
local\u irq\u disable()
local\u irq\u enable()
local\u irq\u save()
local\u irq\u restore()
。然而,在如此长的时间内这样做(毫无疑问,在现代CPU速度下,5ms是一段很长的时间)被认为是相当反社会的

还要注意,现代机器具有无法屏蔽的SMI(系统管理中断),它可能会占用CPU一段令人痛苦的时间,因此您的代码可能需要处理这种情况


现在的内核是可抢占的,并且有用于内核代码的高分辨率计时器-您的代码可能可以使用这些计时器(请参见
include/linux/hrtimer.h
)。

有人吗?现在的大多数硬件应该能够在没有CPU干预的情况下将数据传输到RAM。这是正确的方法。IIRC,cli()/sti()应该仍然在2.6版本中,以实现向后兼容性。5ms不再是“短”的-这实际上是数百万CPU周期的浪费…随着RT补丁集的合并,这只会变得更加棘手。