Lluís me ha dado una gran sorpresa al encontrar un método con el cual se puede tener soporte de Smart Batteries (e.g. Portátil Acer 4002WLMi) en Ubuntu Hoary sin tener que recompilar el kernel. En contrapartida el arranque se ralentiza unos 10 o 15 segundos, pero al menos es una solución más asequible para novatos. Por ahora no lo probaré dado que ya tengo el kernel compilado con soporte, pero lo tendré en cuenta para el futuro 😀
Actualización I He probado el método descrito con un Acer TravelMate 4002WLMi, para que funcionase sin problemas he tenido que utilizar el compilador de Intel versión 2005-03-09, con otras versiones me fue imposible compilar sin errores.
Actualización II Me he cansado que no funcione la web de ubuntu-es cada vez que quiero consultar su artículo, así que lo añado a continuación:
Tengo la suerte de contar con un Acer TM 4001 wlmi, cuya batería es una smart battery y no funciona con los drivers acpi por defecto.
Bruno Ducrot creo un parche del kernel y unos módulos para poder acceder, pero tenía algún bug q me petaba al cargarse del todo o descargarse del todo. Además, había que recompilar el núcleo.
Pues bueno, ahora tengo por fin una solución relativamente sencilla para el problema, sin recompilar kernel en ubuntu.
Lo que se necesita es el parche dsdt-initrd, pero ubuntu lo trae aplicado ya en sus kernels (al menos hoary). También Mandrake lo trae y es posible que otras distros también lo traigan.
Lo siguiente que se necesita es un compilador/decompilador raro de intel llamado iasl.
Para bajarse las fuentes, hay que ir a:
http://developer.intel.com/technology/iapc/acpi/downloads.htm
Habrá que compilar, que no es muy dificil.
Hace falta flex, y creo que bison. Eso sí, tuve problemas con el paquete flex de ubuntu (demasiado nuevo??) y tuve que instalar el paquete flex-old, también en los repositorios, para poder compilarlo.
Una vez que tenemos el ejecutable podemos copiarlo por ejemplo en /usr/local/bin para tenerlo en el PATH.
Ahora, nos bajaremos la ultima versión del driver en:
http://sourceforge.net/projects/sbs-linux/
Descomprimimos en /donde/quieras/sbs-{version}
Ejecutamos (en algunos casos necesitaremos ser root o sudoer):
$ cd /donde/quieras/sbs-{version}
$ cat /proc/acpi/dsdt > dsdt.dat
$ iasl -d dsdt.dat
$ patch < XXXXXXXX-sbs-cm.diff
$ iasl dsdt.dsl
Obtenemos así DSDT.aml
Las XXXXXXXX son la versión del diff y variará según el ordenador. Solo hay dos ficheros que son:
acer-tm4xxxx-sbs-cm.diff
acer-tm32xx-sbs-cm.diff
Para más info, leeros el README del sbs-{version}
Ahora, lo más delicado. Vamos a modificar nuestro initrd, pero lo haremos en una copia:
$ cp /boot/initrd.img-{version} /boot/initrd.img-{version}-dsdt
Por alguna extraña razón no me deja modificar con sudo los initrd así que usamos root:
$ sudo -s
Y ahora parcheamos nuestro initrd
$ echo -n “INITRDDSDT123DSDT123” >> /boot/initrd.img-{version}-dsdt
$cat DSDT.aml >> /boot/initrd.img-{version}-dsdt
$echo -n “INITRDDSDT321DSDT321” >> /boot/initrd.img-{version}-dsdt
Ahora, solo tenemos que editar el fichero /boot/grub/menu.lst
$ sudo gedit /boot/grub/menu.lst
Buscamos nuestra entrada del kernel actual, la copiamos y modificamos el initrd añadiendo al final -dsdt
Os copio mi entrada modificada, pero la vuestra podría cambiar:
title Ubuntu, kernel 2.6.10-5-686-dsdt
#:2 < -- type: 0 => linux, 1 => windows, 2 => other
root (hd0,1)
kernel /boot/vmlinuz-2.6.10-5-686 root=/dev/hda2 ro quiet splash
initrd /boot/initrd.img-2.6.10-5-686-dsdt
savedefault
boot
Lo único que cambia es el -dsdt que añado en la línea del initrd y en el nombre.
Actualización III Nuevo método para Smart batteries en Ubuntu más sencillo.