Улучшенное управление питанием (Advanced Power Management)

Переносные компьютеры, в общем случае, (и многие настольные) поддерживают apm - "advanced power management" (улучшенное управление питанием). В этом разделе рассказывается о том, как включить поддержку apm в ядре Linux. Те, кто имеет богатый опыт работы с Linux, могут посчитать этот раздел довольно скучным и предпочтут пропустить его.

Что APM может сделать для вас

Я не буду вдаваться здесь в детали - за более подробной информацией обращайтесь к Linux APM drivers page по адресу http://www.cs.utexas.edu/users/kharker/linux-laptop/apm.html Все, что вам нужно знать - это то, как с помощью apm процессор может указать bios, что в данный момент не происходит ничего интересного, так что bios может немножко позаботиться о сохранении энергии: снизить тактовую частоту, выключить жесткий диск и дисплей, ну и т.п.

Apm отвечает за режимы "ожидания" (suspend) и "сна" (sleep), а также за режим "выключения диска" (suspend to disk) или "состояния ожидания" (hibernation). Другая замечательная, хотя и не столь важная возможность - с помощью apm shutdown -h не только остановит вашу систему, но и выключит компьютер.

(Кстати, большинство систем Linux вставляют shutdown -r в файл /etc/inittab и связывают его с нажатием control-alt-delete. Я предпочитаю вместо -r прописывать -h, так что нажатие известной комбинации клавиш просто выключает мой компьютер.)

Не все производители корректно реализуют apm bios, так что на некоторых лэптопах могут возникать проблемы с драйверами apm под Linux (если это относится к вашей машине, то, скорее всего, она будет зависать либо при загрузке системы, либо при выходе из режима ожидания). Если вы не уверены, посмотрите информацию про вашу модель на Linux laptop page.

Как включить поддержку APM под Linux

Это просто - достаточно перекомпилировать ядро Linux. Если вы не знаете, как это сделать - посмотрите Kernel-HOWTO.

Ниже приведены значения опций ядер 2.0.30 и выше, установленные по умолчанию (раздел "символьные устройства"):

Поддержка APM BIOS (Advanced Power Management BIOS support): Да (Yes)
Игнорировать USER SUSPEND (Ignore USER SUSPEND): Нет (No)
Включать управление питанием при загрузке (Enable PM at boot time): Да (Yes)
Выполнять idle вызовы процессора при простое (Make CPU Idle calls when idle): Да (Yes)
Разрешить выключение консоли с помщью APM (Enable console blanking using APM): Да (Yes)
Выключать питание при завершении работы системы (Power off on shutdown): Да (Yes)

Прочитайте справку по тем или иным опциям конфигурации - она подробно объясняет, что делает каждая опция, так что я не буду повторяться.

Если ваш компьютер не полностью поддерживает стандарт apm bios, то включение некоторых из этих опций может привести к сбою системы. Проверьте все опции после сборки нового ядра, чтобы убедиться, все ли работает.

Примечание о выключении консоли: Дэвид Бэйтмэн (David Bateman) сообщил мне, что эту опцию включать не стоит, так как в текущей версии XFree 3.2 с ней возникают проблемы: "Симптомы следующие: при старте X экран выключается. Исправляется это простым нажатием клавиши. Маленькая, но досадная проблема. В следующей версии XFree будет реализована нормальная поддержка DPMS для микросхем лэптопов, включающая код для выключения ЖКД (LCD). Читайте руководство (manpage) по xset в XFree 3.2A." Дэвид также заметил, что продолжительность жизни подсветки монитора зависит от количества ее включений и выключений: "Так что ищите компромисс между временем жизни батареи и временем жизни подсветки.")

(Обновление: С XFree 3.3 эта проблема на моем лэптопе осталась. Мне сказали, что она будет исправлена в одной из следующих версий ядра.)

Поддержка APM и драйвера PCMCIA

После перекомпилирования ядра не забудьте перекомпилировать драйвера pcmcia.

Готовые драйвера pcmcia, поставляемые с большинством дистрибутивов, не имеют поддержки apm, из-за чего bios не может дать команду на выключение вашим PCMCIA-картам.

Кроме того, драйвера нужно перекомпилировать при обновлении версии ядра, если старое ядро было скомпилировано с выключенной поддержкой информации о версиях модулей (эта опция находится в разделе "поддержка загружаемых модулей" (loadable module support) конфигурации ядра).

За более подробной информацией по компилированию драйверов обращайтесь к PCMCIA-HOWTO или к Linux PCMCIA drivers homepage на http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html.

Пакет apmd

После того, как вы включили поддержку APM, скачайте пакет apmd с Linux APM drivers page. Он не является обязательным, но в нем есть несколько полезных утилит. Демон apmd ведет журнал состояния батарей и посылает предупреждение, когда они садятся. Команда apm может перевести систему в режим ожидания, а xapm показывает состояние ваших батарей.

(Кстати, если у вас возникают проблемы с pcmcia картами при возврате из режима ожидания, то попробуйте альтернативный пакет apmd с http://www.cut.de/bkr/linux/apmd/apmd.html. Он выгружает драйвер pcmcia перед переходом в режим ожидания и загружает его при возобновлении нормальной работы.)

Grant Taylor немного поэкспериментировал с пакетом apmd и дал следующие полезные подсказки.

Он обнаружил, что жесткий диск его лэптопа забывает параметр hdparm -S (время до перехода диска в режим ожидания) при выходе из режима ожидания: "Я подправил apmd так, чтобы он сбрасывал этот параметр при каждом выходе из режима ожидания. Это важная вещь, хотя и системно-зависимая..."

(Примечание: На моем лэптопе время до перехода жесткого диска в режим ожидания контролируется (и сбрасывается в случае необходимости) bios-ом, так что я не могу проверить, является ли эта маленькая проблема системно-зависимой. Если это так, пошлите мне сообщение.)

Grant также использовал хорошую уловку для гашения экрана XFree86, с помощью apmd

А что если мой лэптоп не поддерживает APM?

Если в bios вашего компьютера нет настроек сохранения энергии (хотя даже старые лэптопы, не поддерживающие apm, позволяют, как минимум, установить время до перехода компьютера и жесткого диска в режим ожидания), то воспользуйтесь командой hdparm -S. Даже это сильно поможет, так как жесткие диски потребляют много энергии. hdparm должен быть установлен в системе, синтаксис команды описан в man hdparm.