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