ThinkPad EC Linuxon
Post date: Jan 5, 2012 9:12:29 PM
A ThinkPadekben van egy sokatmondóan Embedded Controller névre hallgató chip, amivel direktben lehet állítani bizonyos hardver-paramétereket. Ez hackelés szempontjából elsősorban azért érdekes, mert Linux alatt könnyedén lehetett olyan scriptet írni, ami a szükségesnél nagyobb fordulaton működő CPU-hűtőt az EC értékek módosításával lehalkította. Én is használtam a ThinkWikiből származó tp-fancontrol scriptet, ami a setlevel()-ben épp ehhez nyúl hozzá a procfs-en keresztül. A megfelelő read-write procfs file (/proc/acpi/ibm/ecdump) csak akkor létezett, ha a thinkpad_acpi modul az "experimental=1" opcióval lett betöltve. Mondanom sem kell, hogy ez egy durva beavatkozás, amivel akár tönkre is lehet tenni a gépet.
Valamikor a 2.6.35 előtt a thinkpad_acpi driverből kivették ezt a részt, arra hivatkozva, hogy ehhez van egy általános interface a sysfs-ben. Érdekes módon ezt egy SuSE fejlesztő csinálta, talán nem véletlen, hogy a SuSE mindig is jó támogatást adott az IBM hardvereihez. Mindenesetre a tp-fancontrol megszűnt működni. Én nem foglalkoztam vele sokat azóta, bár a hűtés így hangosabb a kelleténél az X61s-ben.
Ma megint eszembe jutott, hogy érdemes lenne tanulmányozni az ecdump file-t, ekkor vált nyilvánvalóvá, hogy egy ideje már nincsen ecdump. Mi van hát helyette? Az ec_sys.
$ modinfo ec_sys
filename: /lib/modules/3.1.0-1.2-desktop/kernel/drivers/acpi/ec_sys.ko
license: GPL
description: ACPI EC sysfs access driver
author: Thomas Renninger <trenn@suse.de>
srcversion: 9B61EEC52CBD077DF7CF010
depends:
vermagic: 3.1.0-1.2-desktop SMP preempt mod_unload modversions
parm: write_support:Dangerous, reboot and removal of battery may be needed. (bool)
Ha be van töltve az előbbi modul, az ec_access segítségével férünk hozzá (az acpica csomagból):
# ec_access -r
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00: a6 05 a0 40 fe 96 00 00 1f 02 47 00 00 00 80 00
10: 00 00 ff ff f4 3c 87 09 4b ff 83 01 ff ff 2d 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 88 00 00 80
30: 07 00 02 00 30 04 00 00 91 00 20 12 00 50 00 00
40: 00 00 00 00 00 00 14 01 02 01 00 00 00 00 00 00
50: 00 c0 02 19 dc 07 01 05 14 35 1a 59 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 12 30 80 2a 2e 2e 27 17 80 17 80
80: 00 00 00 06 eb 0e 03 00 00 00 00 00 00 00 6c 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 7b 00 a4 0a ff ff 05 00 00 00 07 3c ff ff c0 02
B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C0: 2b 25 80 80 80 80 80 80 00 41 00 00 00 00 00 00
D0: 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
E0: 00 00 00 00 00 00 00 00 10 20 b2 05 24 2e 55 03
F0: 37 4d 48 54 32 34 57 57 0e ae 4d 8e 0e 5b 84 42
Ennek a kimenete megegyezik a korábbi procfs ecdump tartalmával, és ha az előbbi driver a write_support opcióval van betöltve, lehet is vele írni a regisztereket.
A driver a /sys/kernel/debug/ec/ec0/io file-on keresztül ad hozzáférést az EC-hez.
További info: Elavult IBM ACPI LInux driver README, az ecdump leírásával