Stefan Seyfried, перевод: Hrafn
2009-03-18
Оригинал: Suspend to RAM by Stefan Seyfried
Цель S2ram состоит в том, чтобы добиться работы suspend-to-RAM «из коробки» на как можно большем количестве машин.
Пакет называется suspend или uswsusp и устанавливается по-умолчанию во многих дисрибутивах.
Если ваша версия S2ram не содержит всех опций, которые описываются в этой статье, попробуйте получить более свежую версию, например здесь.
Опции -m и -v были добавлены довольно недавно.
suspend-to-RAM уже работает на многих машинах. Это означает, что компьютер «просыпается» и продолжает работу, клавиатура работает, есть доступ к жесткому диску, но зачастую не работает видео и лампа подсветки монитора. Есть некоторые параметры для этого:
Начиная с ядра 2.6.16, параметр acpi_sleep может быть установлен во время работы машины (в перезагрузке нет необходимости) в /proc/sys/kernel/acpi_video_flags. Варианты: «1» для s3_bios, «2» для s3_mode, «3» для обеих сразу. Больше информации об этом „хаке“ можно найти в исходниках ядра (обычно устанавливаются в /usr/src/linux) в файле Documentation/power/video.txt.
Есть некоторые машины, которые не просыпаются, используя консольный framebuffer. Недавние модели Dell и HP, например, очень часто попадают в их число. Вы можете выключить framebuffer, установив в файле конфигурации загрузчика — «vga=0». Конфигурация grub обычно находится в /boot/grub/menu.lst.
Если ни один из способов, описанных здесь, не работает должным образом, обязательно проверьте, действительно ли машина не просыпается или только видео не работает так, как надо. Хороший способ проверить это состоит в том, чтобы запустить систему в минимальной конфигурации (init=/bin/bash), запустить s2ram -f, и после пробуждения, когда дисплей еще выключен, проверить, работает ли все еще клавиша «Caps Lock» (вы должны увидеть включение индикатора Caps Lock на клавиатуре). Если так и есть, то скорее всего проблема действительно в инициализации видео. Если же нет, то это вероятно проблема BIOS или ошибка в ядре Linux.
s2ram — часть проекта suspend http://sourceforge.net/projects/suspend на sourceforge, и пакет для Suse 10.1 также доступен.
Установите пакет и потом наберите в консоли s2ram. Если ваша машина есть в whitelist, должен сработать suspend-to-RAM. Будьте осторожны, некоторые поврежденные драйвера необходимо выгрузить до засыпания и загрузить после пробуждения. Если вы просто хотите узнать, известна ли ваша машина и какие режимы она поддерживает (если поддерживает), наберите команду s2ram -n.
S2ram также входит в последнюю сборку powersaved: если пакет suspend установлен, powersaved до своего старта проверит (используя s2ram -n) машину на возможность работы suspend-to-RAM, и в зависимости от результатов проверки включит или выключит «suspend button».
Просто узнайте какой режим необходим вашей машине (если необходим), затем отправьте эту информацию нам вместе с выводом команды s2ram -i.
Режимы работы могут быть включены из командной строки s2ram:
>seife@susi:~> s2ram -h
Usage: s2ram [-nhi] [-fspmrav]
Options:
-h, -help: this text.
-n, -test: test if the machine is in the database.
returns 0 if known and supported
-i, -identify: prints a string that identifies the machine.
-f, -force: force suspending, even on unknown machines.
the following options are only available with -force:
-s, -vbe_save: save VBE state before suspending and restore after resume.
-p, -vbe_post: VBE POST the graphics card after resume
-m, -vbe_mode: get VBE mode before suspend and set it after resume
-r, -radeontool: turn off the backlight on radeons before suspending.
-a, -acpi_sleep: set the acpi_sleep parameter before suspend
1=s3_bios, 2=s3_mode, 3=both
-v, -pci_save: save the PCI config space for the VGA card.
Опции, в большинстве случаев, понятны сами по себе. Отметьте, что вы должны использовать опцию -f на всех неизвестных машинах, затем добавить надлежащие режимы работы. Опция -n нуждается в дополнительном числовом аргументе — от 1 до 3 — определяя, таким образом, режимы s3_bios, s3_mode или и то, и другое.
Лучший способ начать изучение неизвестной машины состоит в том, чтобы загрузить ее, набрав init=/bin/bash в приглашении загрузчика, в минимальном окружении, а затем сделать следующее:
#mount /proc
#mount /sys
#s2ram -f
Если первая попытка увенчалась успехом, значит все отлично. Отправьте нам вывод команды s2ram -i (смотрите «Как связаться с разработчиками s2ram?» далее в этой статье). Если же это не удалось, попробуйте следующие варианты:
Если ни одна из этих комбинаций не сработала, попробуйте добавить ключ «-v».
Замечание: смешивание опций «-a» с опциями vbetool («-p», «-m», «-s») — это крайняя мера, обычно она не имеет большого смысла.
Мы надеемся, что один из вариантов вернул вашу машину к жизни (и подсветка включилась). Если вы нашли комбинацию, которая работает, отправьте нам эту информацию вместе с выводом s2ram -i. Если вы нашли несколько комбинаций, которые работают, например, "s2ram -f -a 3″ и «s2ram -f -p -m», предпочтительней использовать метод в ядре «-a», чем в пространстве пользователя («-p», «-m», «-s»).
Если вы нашли комбинацию, которая работает, пожалуйста, проверьте работает ли это в обоих перечисленных ниже случаях, прежде чем сообщать об успехе разработчикам:
Нормально, когда содержимое текстовой консоли исчезает после использования «-p» и «-m», при использовании фреймбуфера это можно легко решить переходом на другую консоль. Хотя мог бы быть лучший результат при использовании опции «-s», все же предпочтительней использовать «-m» в первую очередь, если это работает.
Отметьте, что вы действительно должны попробовать проделать все это, находят в минимальном окружении текстовой консоли. Сообщения, что это там работает, намного более полезны, чем сделанные только в Иксах. При этом вы также не получите такие побочные эффекты, как сообщения об остановке сразу после пробуждения от демонов управления питанием.
Если на вашей машине установлена графическая карта Radeon, попробуйте добавить ключ «-r» к вашей комбинации. Известно, что это помогает ThinkPad 30-й серии (T30, X31, R32…). Если карта Radeon у вас отсутствует, то данный ключ не имеет смысла использовать.
В whitelist есть несколько обобщенных разделов, и возможно, что какой-то из них может соответствовать машинам, которые отличаются от проверенных. Сделайте то же самое, что описано в разделе «Моей машины нет в whitelist? Что мне делать?», узнайте, какие варианты подходят вашей машине и отправьте нам информацию об этом вместе с выводом s2ram -i. Таким образом, мы, соответственно, сможем обновить whitelist.
Отправьте письмо в список рассылки suspend-devel на suspend-devel@list.sourceforge.net. Если все это не работает по каким-то причинам, вы можете отправить письмо непосредственно мне, seife @ suse.de. Но список рассылки обычно отличается более быстрой скоростью ответа и большим количеством хорошо осведомленных людей.
Sitsofe Wheeler выяснил, что много машин можно проверить, не устанавливая ничего, просто используя OpenSUSE 10.2 Live DVD.
Свежие пакеты могут быть найдены в проекте Stefan Seyfried’s Buildservice на http://software.opensuse.org/download/home:/seife или непосредственно на OpenSUSE Factory. Пакет называется «suspend». Для последних пакетов вам возможно придется установить пакет libx86, который находится в том же самом месте.
Tim Dijkstra поддерживает пакет в Дебиан (называется uswsusp). Он находится на http://packages.debian.org/unstable/admin/uswsusp.
Если вы знаете об обновленных пакетах для других дистрибутивов, пожалуйста, обновите эту статью или сообщите мне в список рассылки suspend-devel, чтобы я мог обновить это.
openSUSE 10.2 будет использовать окружение pm-utils, поэтому варианты конфигураций, описанные здесь, могут использоваться в опциях s2ram.
s2ram входит в последнюю версию powersaved, имеются некоторые варинты конфигурации, которые позволяют выбрать вам режим работы, если ваша машина не входит в whitelist. Они описаны здесь.
SUSE 10.1 использует powersaved, поэтому варианты конфигураций, описанные здесь, могут использоваться для определения режима работы.
Это только tips & tricks, которые я узнал, пытаясь заставить машины засыпать. Используйте их с осторожностью.
Машины с Intel Graphics Chipsets часто работают с «s2ram -f -a 3», используя фреймбуфер vesafb. Если «s2ram -f -a 3» не работает, часто работает хорошо «s2ram -f -p -m».
Более новые драйвера Intel похоже имеют проблемы с «-s» (VBE_SAVE), таким образом, если это вообще возможно, надо использовать «-m» (VBE_MODE). Смотрите здесь. Вообще говоря, VBE_MODE предпочтительней, чем VBE_SAVE.
В последнее время множество машин с ATI Graphics Chipsets, с которыми я столкнулся, вообще не работают с каким-либо фреймбуфером (часто они висели в BIOS, даже Caps Lock не работал). Часто они прекрасно работали с «vga=0» и «s2ram -f -p -m» или «s2ram -f -p -s».
При проблемах с пробуждением s2ram у драйвера fglrx-driver-8.32.xx, обновите его до 8.34.хх.
После нескольких специфичных действий машина с картой NVidia заработала с «s2ram -f». Смотрите подробную инструкцию здесь: NVidia Suspend Howto.
В последнее время я видел много машин, которые нуждались в выключении APIC в командной строке ядра с «noapic», иначе они не просыпаются или начинаются вести себя странно после пробуждения (timer interrupts no longer working etc.) В этом нет необходимости с недавними ядрами, openSUSE 10.2 в этом уже не нуждается.
s2ram — первичный «низкоуровневый» системный инструмент. Чтобы использовать это в «реальном производстве», вы должны включить это в вашу установку управления питанием, например, в ваш скрипт acpid (они могут вызвать suspend нажатием на кнопку, например). Если у вас дистрибутив, использующий powersave, пожалуйста, прочитайте Powersave_s2ram.
Это должно быть исправлено, по крайней мере с ядра 2.6.20, таким образом в режимах работы больше не будет необходимости.
Иногда, чтобы добиться работы suspend to RAM, приходится приложить много усилий. Если вы хотите почитать примеры того, что пришлось пройти людям, посмотрите здесь: the following report from Bugzilla. Winfried — мой герой! :) Также весьма важно знать, виснет ли машина после пробуждения целиком или только дисплей не работает. Смотрите статью «Отладка ACPI спящего режима», чтобы узнать, как это сделать.