Мобильные юниксы 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, все-таки мы рассматриваем современное железо в ноутбуках, а это обязывает нас быть на переднем крае ядерных разработок. |