Linux驱动程序-如何防止中断

发布于 2024-09-24 02:33:20 字数 114 浏览 8 评论 0原文

我是 Linux 驱动程序的新手,正在为硬件编写一个字符驱动程序。

在驱动程序功能(例如 ioctl)执行时防止中断(软件/硬件)干扰的确切方法是什么?

谢谢,

普伊

I am new to linux driver and writing a char driver for hardware.

What is the exact way to prevent interrupt(software/hardware) jamming in while the driver functions (eg. ioctl) is executing?

Thanks,

Pui

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

毁我热情 2024-10-01 02:33:20

您的意思是禁用系统中的所有中断吗?这实际上并不是一个好主意。

如果您有一段代码并且希望确保不会出现意外中断,请查看 spin_lock_irqsave()。这将禁用本地中断。完成后,您可以使用 spin_lock_irqrestore()。

如果您只关心更新变量,您可以考虑将其设为原子(atomic_t)。

最后,如果您只想在驱动程序执行某种功能时禁用 char 硬件的中断,那么这将取决于硬件。例如,对于 LSI 1068E ,你必须向IntMask寄存器写入0xFFFFFFFF。您还可以通过在该中断线上使用disable_irq()来要求内核禁用该中断线,但这可能不是您想要的。

Did you mean disabling all interrupts in the system ? That is not actually not a good idea.

If you have a section of code and you want to make sure that an unexpected interrupt doesn't come in the way, have a look at spin_lock_irqsave(). This will disable interrupts locally. When you are done, you can then use spin_lock_irqrestore().

If you are concerned about only updating a variable, you might consider making it atomic(atomic_t).

Lastly, if you are only thinking of disabling interrupts from your char hardware when the driver is executing a certain kind of function, that will be hardware dependent. For example, for the LSI 1068E, you have to write 0xFFFFFFFF to the IntMask register. You can also ask the kernel to disable an interrupt line by using disable_irq() on that interrupt line but that is not probably what you want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文