2014-01-22 3 views
0

У меня есть небольшой драйвер, который обрабатывает gpio, когда при включении должен сообщать системе спать/просыпаться при нажатии кнопки. Если его удерживать, он должен отключиться.Установить состояние питания Linux из модуля ядра?

В WinCE есть очень простой в использовании механизм (SetSystemPowerState), но, похоже, в Linux не существует чего-то подобного.

Мы также не DBus ...

обновление: я, возможно, нашли ответ

Shutdown (embedded) linux from kernel-space

Хотя это на самом деле не сказать, как спать, но я думаю, что я Вы сможете понять все остальное. Это не похоже на правильный способ обработки драйвера ядра Linux, поскольку модуль встроен в ядро. Не похоже, что у меня есть все состояния питания, доступные для переключения без добавления пакетов за пределы ядра.

+1

Если вы нашли ответ на свой вопрос, лучше всего, если вы разместите его как ответ, а не обновите свой вопрос. Таким образом, система, поисковые системы и люди будут знать, что на вопрос ответят. Позднее вы также можете принять свой собственный ответ. – Shahbaz

+0

Я бы не счел это хорошим или полным ответом. Это не говорит мне, как изменять состояния питания, это общий способ вызова команд в командной строке пользователя. И у меня нет программы на нашей платформе, которая установит состояние сна. Я все еще ищу более полный ответ. Я разместил ссылку на ответ, который, как я чувствую, более грязный. – Kevin

ответ

0

Если вы хотите полностью приостановить свою систему, вы можете использовать интерфейс/sys/power/state, например, belows.

echo "mem" > /sys/power/state 

Это вызывает функцию state_store() в kernel/power/main.c приостановить свою систему в память. Вместо «mem» вы можете использовать «standby» или «disk» только в том случае, если ваша система поддерживает их.

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); 

Однако расположение эха-команды и водителя мощности может отличаться в вашей системе.

Смежные вопросы