|
Ключевые слова: acpi, apm, suspend, sleep, linux, kernel, (найти похожие документы)
Date: Wed, 8 Jan 2004 10:18:08 +0000 (UTC) From: Maxim Chirkov <mc@opennet.ru> Newsgroups: opennet Subject: Мгновенная загрузка Linux через режимы Suspend to disk или Hibernate Режим засыпания "Suspend to disk" позволяет мгновенно выключить компьютер и так же мгновенно продолжить работать после включения, с полным сохранением текущего состояния системы. Т.е. производится сброс полного дампа виртуальной памяти и информации о состоянии системы на диск, при включении состояние полностью восстанавливается. Что требуется: -------------- - Последнее Linux ядро 2.4.x в исходных текстах. - ACPI патч (acpi-дата-2.4.x.diff.bz2) с сайта http://acpi.sourceforge.net - Software Suspend (swsusp) патчи (два патча software-suspend-*-core.bz2 и software-suspend-*-linux-2.4.x.bz2) и скрипт suspend.sh с http://swsusp.sf.net - acpid из дистрибутивного пакета или можно скачать c http://phobos.fs.tum.de/acpi/ (swsusp входит в состав ядра 2.6.x, для 2.6.x доступно альтернативное решение - pmdisk (СONFIG_PM_DISK) http://lwn.net/Articles/48471/) Сборка ядра: ------------ 1. Разархивируем и патчим ядро (далее на примере linux-2.4.24). Копируем патчи в linux-2.4.24 и патчим: # bzcat acpi-20031203-2.4.24.diff.bz2| patch -p1 # bzcat software-suspend-2.0-linux-2.4.23.bz2| patch -p1 # bzcat software-suspend-2.0-core-rc3A.bz2| patch -p1 2. Включаем в конфигурации ядра SWSUSP В make menuconfig: General setup ---> Software Suspend support ---> Image Storage (you need at least one writer) ---> [*] Swap Writer Page Transformers ---> [*] Compress image или CONFIG_SOFTWARE_SUSPEND_SWAPWRITER=y CONFIG_SOFTWARE_SUSPEND2=y CONFIG_SOFTWARE_SUSPEND_COMPRESSION=y 3. Пересобираем и устанавливаем новое ядро # make dep && make bzImage && make modules && make modules_install && make install Если ядро ставится вместо родного ядра, поставляемого с Linux дистрибутивом, рекомендую ознакомиться со списком дополнительных патчей используемых создателями дистрибутива. Иногда патчи влияют на работу достаточно серьезных вещей и вам придется удостовериться, что отсутствие этих дополнительных патчей не отразится на вашей системе и принять решение, использовать патч swsusp или пачти из комплекта дистрибутива (swsusp требует "чистого" ядра, за редкими исключениями, описанными в документации к swsusp). 4. Активируем SWSUSP В /etc/lilo.conf добавляем, в блоке описания загрузки текущего ядра: append=" resume2=swap:/dev/hda6" где, /dev/hda6 - swap раздел, размером не меньше чем на 30% превышающим объем ОЗУ. Можно настроить дамп в свапфайл, как это сделать описано в документе /usr/src/linux/Documentation/swsusp.txt, который рекомендуется внимательно прочитать в любом случае. В итоге запись в lilo.conf у меня выглядит примерно так: image=/boot/vmlinuz label=linux root=/dev/hda5 vga=normal append=" resume2=swap:/dev/hda6 ide0=autotune rootflags=data=writeback" read-only initrd=/boot/initrd.img-2.4.24 (не забудьте выполнить команду lilo после внесения изменений в lilo.conf) 5. Перезагружаемся: shutdown -r now Проверка. --------- После перезагрузки смотрим содержимое /proc/acpi/info Если в строке "states:" присутствует S4 (swsusp), то все в порядке, иначе смотрим причину неработы swsusp в /var/log/messages Пробуем заснуть: echo 4 >/proc/acpi/sleep Для информации, S? режимы бывают следующие: - S1 (Stopgrant, Standby) - Временное засыпание, без выключения. На CPU подается питание, но инструкции не выполняются. - S2 - не используется. - S3 (Suspend to RAM) - отключение питания CPU, дамп регистров хранится в ОЗУ - S4 (Suspend to Disk, Hibernate) - полное выключение, дамп памяти и регистров CPU сбрасывается на диск. - S5 - программное выключение питания. Подробнее об ACPI можно почитать http://www.columbia.edu/~ariel/acpi/acpi_howto.txt Настройка acpid и suspend.sh. ----------------------------- Использование /proc/acpi/sleep слишком грубый метод, при засыпании необходимо выгрузить некоторые модули ядра (usb, pcmcia), перезапустить звуковую подсистему, поднять сетевой интерфейс и т.д. Для выполнения этих операций служит скрипт suspend.sh. - Устанавливаем suspend.sh: # ./suspend.sh --install - Редактируем /etc/suspend.conf в соответствии с конфигурацией системы. - Пробуем уснуть: # /usr/local/sbin/hibernat Для пользователей ноутбуков полезно привязать засыпание к факту закрытия крышки. Для этого нужно настроить acpid. - Устанавливаем acpid из пакета или исходных текстов. - В директории /etc/acpi/events создаем два файла lid и power: содержимое /etc/acpi/events/lid (реакция на закрытие панели): event=button/lid.* action=/usr/local/sbin/hibernate содержимое /etc/acpi/events/power (реакция на кнопку питания): event=button/power.* action=/sbin/shutdown -h now - Запускаем apchid service acpid start Теперь при нажатии на кнопку питания будет производиться правильный shutdown, а при закрытии крышки система будет полностью засыпать.
|
Обсуждение | [ Линейный режим | Показать все | RSS ] |
|
Добавить комментарий |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |