Linux kernel 从内核模块设置linux电源状态?

Linux kernel 从内核模块设置linux电源状态?,linux-kernel,Linux Kernel,我有一个处理gpio的小驱动程序,启用该驱动程序后,当按下按钮时,该驱动程序应通知系统睡眠/唤醒。如果它被按住,它应该关机 在WinCE上有一个非常易于使用的机制(SetSystemPowerState),但在linux上似乎没有类似的机制 我们也没有DBU 更新: 我可能已经找到了答案 虽然它并没有真正说明如何睡觉,但我想我能想出其余的办法。这似乎不是处理linux内核驱动程序的正确方法,因为模块内置在内核中。如果不在内核之外添加软件包,我似乎没有可以切换到的所有电源状态。如果您想完全挂起系

我有一个处理gpio的小驱动程序,启用该驱动程序后,当按下按钮时,该驱动程序应通知系统睡眠/唤醒。如果它被按住,它应该关机

在WinCE上有一个非常易于使用的机制(SetSystemPowerState),但在linux上似乎没有类似的机制

我们也没有DBU

更新: 我可能已经找到了答案


虽然它并没有真正说明如何睡觉,但我想我能想出其余的办法。这似乎不是处理linux内核驱动程序的正确方法,因为模块内置在内核中。如果不在内核之外添加软件包,我似乎没有可以切换到的所有电源状态。

如果您想完全挂起系统,您可以使用/sys/power/state接口,如下所示

echo "mem" > /sys/power/state

它在中调用state_store()函数将系统挂起到内存中。只有在您的系统支持的情况下,才可以使用“备用”或“磁盘”,而不是“mem”。

最常用的方法是作为用户空间助手从kernelspace启动该过程:

static const char * const set_power_argv[] = 
      { "/bin/echo", "mem", "/sys/power/state", NULL };

call_usermodehelper(shutdown_argv[0], shutdown_argv, NULL, UMH_NO_WAIT);

但是,echo命令和电源驱动程序的位置在您的系统中可能会有所不同。

如果您找到了自己问题的答案,最好将其作为答案发布,而不是问题的更新。这样,系统、搜索引擎和人们就会知道问题得到了回答。以后你也可以接受你自己的答案,我不会真的认为这是一个好的或完整的答案。它并没有真正告诉我如何改变电源状态,它是在用户命令行上调用命令的一种通用方法。我在我们的平台上没有设置睡眠状态的程序。我仍然在寻找一个更完整的答案。我贴了一个链接到一个答案,我觉得这更像是一个肮脏的工作。