středa 24. června 2009

HTPC ACPI probouzení

Po týdnu od vypečeného upgrade BIOSu jsem si všiml, že se HTPC vůbec nevypíná, jak má (tj. když nic nedělá). Proč si ovšem zhoršovat uhlíkovou stopu o 80 W každou sekundu a platit E.ONu o 2000 Kč ročně navíc? To se musí opravit...

Ponořil jsem se dovnitř a našel problém v nvram-wakeup, který teď zapisoval do úplně jiných registrů BIOSu, než předtím, a tak místo času probuzení nastavoval přetaktování procesoru či jiné nebezpečné hodnoty. Tohle je bohužel bolest toho přímého zápisu do registrů BIOSu, protože ty se po změně verze BIOSu obvykle přesunou někam jinam.

Osmělil jsem se tedy přejít na metodu o řád modernější, a sice svěřit ošemetnou práci s BIOS NVRAM přímo Linuxovému kernelu, především jeho ACPI. Pokud je totiž použito jádro novější než 2.6.22 a je zaveden správný rtc modul (rtc-cmos), pak existuje virtuální adresář /sys/class/rtc/rtc0/, ve kterém stačí zapsat do souboru wakealarm čas probuzení a je poklizeno (podrobněji).

Nakonec jediným problémkem bylo nahrát ten modul rtc-cmos správně. Nestačilo ho bohužel zapsat do /etc/modules, protože modul rtc se nahrává dřív a ten už nedovolí tomu adresáři /sys/class/rtc/rtc0 vzniknout, přestože rtc-cmos je nahraný taky. Z nedostatku času jsem místo správného řešení (pravděpodobně blacklistováním modulu rtc v /etc/modutils/) vyrobil krutý hack - do /etc/init.d/local jsem prostě zapsal

rmmod rtc
modprobe rtc-cmos

a vše začalo krásně fungovat ("konev šetří vodou").

Žádné komentáře:

Okomentovat