我有一个处理gpio的小驱动程序,当启用它时,应该告诉系统在按下按钮时睡眠/唤醒。如果它按下它应该关闭。
在WinCE上有一个非常容易使用的机制(SetSystemPowerState),但在linux上似乎没有类似的东西。
我们也没有dbus ......
更新: 我可能找到了答案
Shutdown (embedded) linux from kernel-space
虽然它并没有真正说出如何入睡,但我想我能够完成剩下的工作。这似乎不是处理Linux内核驱动程序的正确方法,因为模块内置于内核中。如果没有在内核之外添加软件包,我似乎没有可用的所有电源状态。
答案 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命令和电源驱动程序的位置可能因系统而异。