我正在开发一个嵌入式 linux 平台。
当我执行 "echo "mem" > /sys/power/state" 时,系统将挂起。
我知道内核和驱动程序可以知道挂起操作即将到来。但是用户空间进程或应用程序是否有可能收到系统将暂停的通知?如何?
例如,我有一个应用程序将“A”连续写入缓冲区,缓冲区的起始地址由设备驱动程序给出。是否有可能通知该应用程序系统将暂停,以便它可以用“B”替换所有这些缓冲区,以便当驱动程序恢复时,驱动程序看到的所有内容都是“B”?
非常感谢。
我正在开发一个嵌入式 linux 平台。
当我执行 "echo "mem" > /sys/power/state" 时,系统将挂起。
我知道内核和驱动程序可以知道挂起操作即将到来。但是用户空间进程或应用程序是否有可能收到系统将暂停的通知?如何?
例如,我有一个应用程序将“A”连续写入缓冲区,缓冲区的起始地址由设备驱动程序给出。是否有可能通知该应用程序系统将暂停,以便它可以用“B”替换所有这些缓冲区,以便当驱动程序恢复时,驱动程序看到的所有内容都是“B”?
非常感谢。
我不确定它是否对您特别有用,因为提到了“嵌入式”,但是 systemd 可以通过 DBus 通知您:https ://www.freedesktop.org/wiki/Software/systemd/inhibit/
一直在寻找同样的东西。但不幸的是,我在暂停/恢复期间没有找到任何用户空间通知。应用程序只是冷藏/冷冻,他们永远不会知道他们被暂停。
但是,一种可能的方法是从您可以修改的任何驱动程序的挂起/恢复函数中添加通用的 netlink 消息发送或 uevent。应用程序在冻结之前可能永远无法获得足够的时间来处理它,并可能导致竞争条件。假设它收到了暂停消息并在处理它之前被冻结。一旦恢复,它将处理挂起消息。
IMO,最好在驱动程序中处理场景。不理会用户空间。