Použil jsem distribuci Debian Lenny. Jádro mám 2.6.23.1 s patchi
"hrtimers" a
"Active Link Power Management". Mám zapnuty volby
CONFIG_NO_HZ a
CONFIG_HIGH_RES_TIMERS (viz článek
Snížení spotřeby počítače v Linuxu). Verzi BIOSu mám
F.0D.
LAN
Podpora přímo v jádře, ovladač
b44.
WLAN
Přes
ndiswrapper, ovladač pro Windows stažený ze stránek HP. Jaderný ovladač
bcm43xx také funguje (ndiswrapper se mi ale zatím osvědčil lépe, jaderný ovladač je ještě dost "vývojový").
Od jádra 2.6.23 navíc ovladač b43, který se zatím tváří funkčně. Postup zprovoznění
zde. (Podpora je v jádře, ale je třeba "vypreparovat" firmware. Používejte verzi firmware 4, varování fwcutteru se nebojte.)
Touchpad
Běžný synaptics. Používám v podstatě tenhle
konfigurák, jen místo
Option "Protocol" "auto-dev"
používám
Option "Protocol" "psaux"
Po probuzení z disku se totiž změní zařízení, odkud xorg čte eventy touchpadu. Touchpad přestane částečně fungovat (scrolování, ...), dokud se nepřepnete do textové konzole a zpět. S protokolem "
psaux" tento problém nemám.
Zvuk
Podpora přímo v jádře, ovladač
snd-hda-intel.
Firewire
Podpora přímo v jádře, ovladač
ohci1394.
PCMCIA slot
Podpora přímo v jádře, ovladač
yenta_socket.
Modem
Obstarává také alsa driver
snd-hda-intel. Je potřeba mít ještě balíček
sl-modem-daemon a v
/etc/default/sl-modem-daemon nastavit:
SLMODEMD_DEVICE=hw:0,6
SLMODEMD_COUNTRY=CZECH_REPUBLIC
Grafika
V xorg je to ovladač
i810. Pro výstup na monitor a zároveň na externí VGA je nutné přidat do sekce "
Device" něco jako
Option "MonitorLayout" "NONE,LFP+CRT"
Option "CheckLid" "off"
Pro textovou konzoli se mi zatím nepodařilo zprovoznit ovladač
intelfb, tak používám klasický vesa framebuffer. Volby předané jádru:
vga=791 video=vesafb:mtrr:1
IDE řadič
Přes IDE rozhraní je připojena DVD mechanika. Klasický IDE ovladač je
piix. Místo něj je možné používat libata ovladač
ata_piix. DVD mechanika se pak hlásí jako
/dev/sdc0 místo
/dev/hda.
S ovladačem ata_piix jsem měl ale
problémy s vypalováním, tak jsem se vrátil zpět k piix. U jádra 2.6.19 se ata_piix použije jako výchozí, takže je potřeba přidat
piix do souboru
/etc/initramfs-tools/modules (v Debianu) a znovu vygenerovat
initrd.img (v Debianu třeba příkazem
dpkg-reconfigure linux-image-VERZE).
S jádrem 2.6.22 jsem ata_piix ještě nezkoušel.
SATA řadič
Přes SATA rozhraní je připojen pevný disk. Používá se libata ovladač
ahci.
Uspání do RAM, na disk
Uspání do RAM funguje s uswsusp i suspend2. Po probuzení je ale nutné spustit příkaz
vbetool post (nebo v případě uswsusp uspávat příkazem
s2ram -f -p).
Pokud máte v jádře zapnutu volbu
CONFIG_NO_HZ, kompletní probuzení počítače trvá několik minut (od oka tak 5). Během té doby je nejspíš část zařízení aktivní, ale display je vypnutý a stejně tak síť. Po probuzení nedojde k aktualizaci času. Řešením je nepoužívat jako clocksource výchozí "tsc", ale "hpet" nebo "acpi_pm" (viz
cat /sys/devices/system/clocksource/clocksource0/available_clocksource). Stačí přidat jádru parametr
clocksource=hpet (nebo spustit příkaz
echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource).
U jádra 2.6.22 se ale problém s probouzením občas objeví i po změně clocksource. Stane se tak pokud byl počítač uspán, zatímco se nacházel v nějakém nižším C stavu (powermanagement procesoru). Většinou pomůže spustit např. příkaz
openssl speed před uspáním počítače (jako workaround). V jádře 2.6.23 je tento problém s C stavy vyřešen, ale stejně se počítač z nějakého důvodu správně neprobouzí. Projevy jsou pořád stejné (probuzení trvá dlouho a hodiny jsou po probuzení o 5 min pozadu). Pomůže bootovat s parametrem jádra
nolapic_timer. S jádrem 2.6.23 a parametrem nolapic_timer už funguje probouzení spolehlivě.
Jak je zmíněno výše, tyto popsané problémy platí jen při zapnuté volbě
CONFIG_NO_HZ. Bez této volby funguje uspání do RAM bez problému.
Uspání na disk funguje s uswsusp i suspend2. Při použití jádra verze 2.6.22 a nižší se ale po probuzení neupdatuje hodnota TZ0 (odpovídá teplotě CPU) a to je dost podstatný problém. Na základě této hodnoty jsou totiž regulovány otáčky větráčku. Jediný "workaround" který u mě funguje je uspat počítač do RAM a probudit :( V jádře 2.6.23 jsem zatím na tento problém nenarazil.
CPU frequency scaling a throttling
Celeron M nepodporuje speedstep, ale frequency scaling umí. Podrobnosti viz
článek tady na abclinuxu. Modul
p4-clockmod se mi podařilo zavést až od jádra 2.6.20.
Procesor podporuje také CPU throttling. Ten je možné nastavit zapsáním hodnoty 0 až 7 do souboru
/proc/acpi/processor/CPU0/throttling.
"Thermal Zones"
Podle
HP fóra je význam jednotlivých "thermal zones" (
/proc/acpi/thermal_zone/TZ[0-4]/) následující:
- 0: DTS
- 1: Thermal Sensor
- 2: Graphics Controller
- 3: Battery
- 4: Current Fan speed (%) used for debug and development
Rychlost větráčku je kontrolována jen přes TZ0 a (možná) TZ2. Aktuální stav TZ0 je možné zjistit ze souboru
/proc/acpi/thermal_zone/TZ0/state a hodnoty teplot odpovídající jednotlivým stavům TZ0 ze souboru
/proc/acpi/thermal_zone/TZ0/trip_points.
Výchozí rychlost větráčku je 20% a odpovídá stavu "ok" u TZ0. Rychlost při "active[3]" je 40%, při "active[2]" 60%, při "active[1]" 75% a při "active[0]" 100%.
Aktuální stav větráčku je možné zjistit ze souborů v adresáři
/proc/acpi/fan a odpovídá aktuálnímu stavu TZ0. Stav "on" v souboru
C325/state odpovídá stavu "active[0]" (tj. větráček se točí na 100%) atd.
Větráček se spouští na 40% už při teplotě 45 stupňů u TZ0 (stav active[3]"), to je IMHO dost málo a občas to ruší. Změnit to sice jde, třeba příkazem
echo "105:100:100:78:70:60:55" > /proc/acpi/thermal_zone/TZ0/trip_points, ale změněné hodnoty jsou za chvíli automaticky přepsány zpět :( Nezbývá než vypnout nejnižší rychlost větráčku ručně (viz další odstavec).
Rychlost větráčku je možné měnit i "ručně". Např. zapnout větráček na 100% je možné přikazem
echo 0 > /proc/acpi/fan/C325/state a vypnout tuto rychlost (100%) příkazem
echo 3 > /proc/acpi/fan/C325/state. To samé platí i pro ostatní "rychlosti".
Zlepšení při použití jádra 2.6.23 místo 2.6.22
I při zapnuté volbě
CONFIG_NO_HZ funguje probouzení z RAM spolehlivě (ale jen při bootování s paramentrem
nolapic_timer). Po probuzení z disku se updatuje hodnota TZ0 (odpovídá teplotě CPU).