2

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

斯科特

4

1 回答 1

1

现代等价物是local_irq_disable(),local_irq_enable()和。但是,这样做很长一段时间(毫无疑问,在现代 CPU 速度下,5 毫秒是很长的时间)被认为是非常反社会的。local_irq_save()local_irq_restore()

另请注意,现代机器具有无法屏蔽的 SMI(系统管理中断),并且可以在一段令人痛苦的时间内接管 CPU,因此您的代码可能需要处理这种情况。

现在的内核是可抢占式的,并且为内核代码提供了高分辨率的计时器——您的代码也许可以使用这些计时器(请参阅 参考资料include/linux/hrtimer.h)。

于 2010-07-04T14:54:07.107 回答