如何从 IRQ 处理程序终止用户应用程序?

发布于 2025-01-06 21:07:48 字数 267 浏览 0 评论 0原文

我正在开发嵌入式 Linux 系统,当特定的 IRQ 处理程序运行时,我需要关闭系统。我没有很多时间(几十毫秒)。我正在使用 Emergency_restart(),但我现在需要执行一些无法从中断上下文中完成的工作(将与关闭相关的信息写入闪存),因为闪存驱动程序不支持它。

谁能推荐一个好方法来实现这一目标?我希望通过向用户空间应用程序发送信号来正确终止它们,以便它们可以进行闪存写入。我该怎么做?我想,作为替代方案,我可以有一个高优先级进程,等待我的中断生成的信号量......我有什么选择?提前致谢!

I am working on an embedded Linux system, and I need to shut the system down when a particular IRQ handler runs. I don't have a lot of time (tens of milliseconds). I was using emergency_restart(), but I now need to perform some work (writing shutdown-related info to flash) that cannot be done from an interrupt context because the flash driver will not support it.

Can anyone recommend a good way to accomplish this? I would love to properly kill my user-space applications by sending them a signal so that they can do the flash write. How do I do this? I suppose, as an alternative, I could have a high priority process that sits, waiting on a semaphore that my interrupt generates... What are my options? Thanks in advance!

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

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

发布评论

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

评论(1

梦幻的味道 2025-01-13 21:07:48

这正是信号的用途。如果现有信号之一没有意义(请参阅 man 7 signal),请使用用户可定义信号之一:

#define SIGUSR1         10      /* User-defined signal 1 (POSIX).  */
#define SIGUSR2         12      /* User-defined signal 2 (POSIX).  */

That is exactly what signals are for. If one of the existing signals don't make sense (see man 7 signal), use one of the user definable signals:

#define SIGUSR1         10      /* User-defined signal 1 (POSIX).  */
#define SIGUSR2         12      /* User-defined signal 2 (POSIX).  */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文