Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #66, ИЮНЬ 2004 г.

Мобильные юниксы vol.1

Anton Karpov

Xakep, номер #066, стр. 066-104-2


Полноценная поддержка ACPI в 2.4 (здесь и далее под этим я буду подразумевать возможность не только включаться и выключаться, но и "засыпать" с сохранением состояния в оперативную память или раздел винчестера) возможна только с помощью патча Software Suspend (swsusp2). Если быть точным, все, чему этот патч научит ядро 2.4 – это засыпать с сохранением дампа оперативки на раздел диска и просыпаться с восстановлением этого дампа. Для работы понадобятся два патча – специфичный для определенной версии ядра и основной core-патч. На момент написания этих строк последним был патч для 2.4.24 ревизии 7 и core-патч версии 2.0. Разумеется, когда ты будешь читать эти строки, перечисленные версии будут делами давно минувших дней :), хотя патчи могут подойти и для новой версии ядра, например, патч для 2.4.24 может без проблем лечь на 2.4.25. Также не забудь глянуть на ACPI-патчи (это, как правило, косметические исправления) для актуального ядра на сайте acpi.sf.net.

Установка выполняется в четыре шага. Первым делом необходимо пропатчить ядро, сначала применив специфичный патч, а затем уже core-patch:

$ cd /usr/src/Linux-2.4.x

# patch -p1 < location-of-swsusp-version-specific-patch

# patch -p1 < location-of-swsusp-core-patch

Затем включаем в конфигурации поддержку SWSUSP. Hint: если до этого ядро уже было сконфигурировано, можно набрать "make oldconfig", и система предложит включить появившиеся опции:

CONFIG_SOFTWARE_SUSPEND_SWAPWRITER=y

CONFIG_SOFTWARE_SUSPEND2=y

CONFIG_SOFTWARE_SUSPEND_COMPRESSION=y

Или в меню "make menuconfig":

General setup --->

Software Suspend support --->

Image Storage (you need at least one writer) --->

[*] Swap Writer

Page Transformers --->

[*] Compress image

Компилируем и ставим ядро:

# make dep clean bzImage modules modules_install

Затем в /etc/lilo.conf (или в конфиге Grub’а с соответствующими изменениями) прописываем ядру новый параметр – раздел диска, в который будет свопиться содержимое оперативки:

append="resume2=swap:/dev/hda4"

Где hda4 – заранее заготовленный раздел, размер которого вычисляем по формуле: 1,5*ОЗУ. Если создать новый раздел проблематично, то можно настроить свопинг в файл, подробности описаны в документации. Таким образом, запись для SWSUSP-ядра в /etc/lilo.conf может выглядеть так:

# vi /etc/lilo.conf

image=/boot/vmlinuz-2.4.24

label=LinuxSWSUSP

root=/dev/hda2

vga=791

append="resume2=swap:/dev/hda4 hdc=ide-scsi"

read-only

Если все прошло удачно, то после перезагрузки с новым ядром файл /proc/acpi/info должен показать появление нового state S4 (swsusp). В принципе, "заснуть" можно уже сейчас командой "echo 4 > /proc/acpi/sleep" (или "echo > /proc/swsusp/activate"), однако есть способ лучше - использовать поставляемый разработчиками скрипт suspend.sh. Он, например, выгружает "проблемные" модули, чтобы после пробуждения загрузить их снова. За подробностями отсылаю тебя к документации на swsusp.sf.net, а сам тороплюсь перейти к возможностям ядра 2.6, все-таки мы рассматриваем современное железо в ноутбуках, а это обязывает нас быть на переднем крае ядерных разработок.

Назад на стр. 066-104-1  Содержание  Вперед на стр. 066-104-3