我是 linux 驱动程序的新手,正在为硬件编写一个字符驱动程序。
在执行驱动程序功能(例如ioctl)时防止中断(软件/硬件)干扰的确切方法是什么?
谢谢,
培
我是 linux 驱动程序的新手,正在为硬件编写一个字符驱动程序。
在执行驱动程序功能(例如ioctl)时防止中断(软件/硬件)干扰的确切方法是什么?
谢谢,
培
您的意思是禁用系统中的所有中断吗?这实际上不是一个好主意。
如果您有一段代码并且想要确保不会出现意外中断,请查看 spin_lock_irqsave()。这将在本地禁用中断。完成后,您可以使用 spin_lock_irqrestore()。
如果您只关心更新变量,则可以考虑将其设为 atomic(atomic_t)。
最后,如果您只想在驱动程序执行某种功能时禁用 char 硬件的中断,那将取决于硬件。例如,对于LSI 1068E,您必须将 0xFFFFFFFF 写入 IntMask 寄存器。您还可以通过在该中断线上使用 disable_irq() 来要求内核禁用该中断线,但这可能不是您想要的。