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

时间:2014-01-22 19:43:31

标签: linux-kernel

我有一个处理gpio的小驱动程序,当启用它时,应该告诉系统在按下按钮时睡眠/唤醒。如果它按下它应该关闭。

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

我们也没有dbus ......

更新: 我可能找到了答案

Shutdown (embedded) linux from kernel-space

虽然它并没有真正说出如何入睡,但我想我能够完成剩下的工作。这似乎不是处理Linux内核驱动程序的正确方法,因为模块内置于内核中。如果没有在内核之外添加软件包,我似乎没有可用的所有电源状态。

2 个答案:

答案 0 :(得分:0)

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

echo "mem" > /sys/power/state

它调用kernel/power/main.c中的state_store()函数来暂停系统内存。只有在系统支持“备用”或“磁盘”时,才能使用“备用”或“磁盘”而不是“mem”。

答案 1 :(得分:0)

最常用的方法是从内核空间作为用户空间帮助程序启动进程:

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命令和电源驱动程序的位置可能因系统而异。