Portál AbcLinuxu, 2. května 2025 05:08
Tak jsem se dnes opět trochu rýpal v jádře a snažil jsem se rozběhat suspend to disk. Uspání do paměti už mi funguje přes týden a tak to tu plácnu pěkně pohromadě. Pro začátek jen pár poznámek, potřebujeme PC které má ACPI, suspend nefunguje se SMP kernelem.
Suspend to RAM znamená (jak asi většina z vás tuší) uspáni, kdy data zůstávají v paměti. Vypne se pouze disk, procesor se přepne do režimu spánku... prostě se šetří šťáva.
Suspend to disk je už o poznání užitečnější, jen si představte systém nastartovaný k použití za pouhých 30 vteřin :). Jde o to, že se data z paměti uloží na disk a počítač se vypne. Po zapnutí se data nahrají zpět.
Zdrojáky kernelu řady 2.6, já jsem to zkoušel na 2.6.16.5, nějaký použitelný konfig ke kernelu, tak aby to co vyprodukujeme bylo použitelné a také nějakou zkušenost s kompilací jádra. Pro začátečníky bude vhodný seriál Cesta do hlubin kompilace jádra.
Stažený archiv se zdrojovými kódy jádra si rozbalíme do /usr/src/, v tomto adresáři uděláme symlink linux -> linux-2.6.16.5. Můžeme aplikovat patche, v mém případě patch vesafb-tng. A jako root spustit make xconfig, nebo make menuconfig.
Při konfiguraci nezapomeneme zvolit v sekci Power Management support položku Software Suspend. Pozornost věnujme položce Default resume partition, jako její hodnotu napište blokové zařízení které odkazuje na swap partition, Tuto volbu lze předávat kernelu i jako parametr resume=/dev/other_device. V sekci ACPI (Advanced Configuration and Power Interface) Support povolíme ACPI Support a zatrhneme Sleep States a /proc/acpi/sleep.
Teď už stačí zkompilovat jádro a moduly, jádro zkopírovat do /boot upravit zavaděč tak aby jej byl schopen nabootovat, a hurá dál.
Pokud vše proběhlo jak mělo, tak můžeme zkusit uspat počítač. Uděláme to velmi jednoduchým příkazem:
echo 1 > /proc/acpi/sleep # for standby echo 2 > /proc/acpi/sleep # for suspend to ram echo 3 > /proc/acpi/sleep # for suspend to ram, but with more power conservative echo 4 > /proc/acpi/sleep # for suspend to disk echo 5 > /proc/acpi/sleep # for shutdown unfriendly the system
A teď k trochu kyselému jablíčku, nic není tak jednoduché, zjistil jsem, že pár věcí nefunguje po probuzení zrovna správným způsobem. Při spání na disk a následném probuzení nefungoval lirc, samozřejmě modem, z neznámého důvodu přestalo reagovat tlačítko rozhraní acpi a vůbec nejhůř dopadly Xka s proprietárním modulem od nVidiie. Výsledkem je tento skript:
#!/bin/bash #/etc/acpi/susend.sh sh /etc/rc.d/rc.lirc stop sh /etc/rc.d/rc.ppp stop /sbin/rmmod button /sbin/init 3 echo 4 > /proc/acpi/sleep sleep 1 /sbin/init 4 sh /etc/rc.d/rc.lirc start sh /etc/rc.d/rc.ppp start /sbin/modprobe button
Co dodat... snad jen tolik: je velmi příjemné mís stroj nastartován za půl minuty :) (i přes ty drobné komplikace to stojí za vyzkoušení).
Dost mě překvapilo, že suspend z vanilly chodí takhle použitelně.
Tiskni
Sdílej:
S proprietárními ovladači je jenom trápení. Měl jsem podobný problém s ovladačem od ATI, ale vyřešil jsem ho následujícím trikem. Před suspendem na disk nejdřív přepnu z X na textovou konzoli(textový mód, nikoli framebuffer). Po probuzení logicky zase přepnutí z konzole do X.
CONFIG_HOTPLUG_CPU=ytoz tak -) mimochodem software suspend roste tady v cechach ... jeho vyvojarem je pan Machek ... sikovny tot pan -)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.