Soporte Smart Batteries en Ubuntu Hoary sin recompilar kernel

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.

5 thoughts on “Soporte Smart Batteries en Ubuntu Hoary sin recompilar kernel

  1. Hola

    Tengo un acer aspire 1691wlmi y tengo problemas a la hora de instalar el DSDT nuevo. Lo he conseguido compilar y en la página web de ubuntu-es hay un como (en dicha sección) que explica cómo aplicar el parche sin necesidad de añadirlo al initrd, es decir, una forma supuestamente aún más facil que la que has comentado en este articulo. Es esta (la pongo porque ubuntu-es carga una vez de cada 100 intentos… 🙁 ):

    —————————————————————————————————-
    El DSDT es un tipo de archivo que permite sobre sobreescribir la información acerca del ACPI que da el hardware.

    Si la información proporcionada por el hardware es incorrecta nos podemos encontrar cosas como: tarjetas de sonido que funcionan mal, baterias de las cuales es imposible sacar la capacidad restante, funciones de ahorro de energia deshabilitadas, etc…

    Con los archivos DSDT se puede arreglar todo lo anterior, pero se deben cargar justo en el momento que se inicia el núcleo del sistema.

    Soluciones:

    * Adjuntar ese archivo al initrd manualmente cada vez que hay una actualizacion del kernel
    * Dejar que Ubuntu lo haga por nosotros de forma automatica

    Como esta claro voy a explicar la segunda 😉 y en solo dos pasos:

    1. Renombramos nuestro archivo DSDT a /etc/mkinitrd/DSDT
    Atencion: usar ese nombre de archio tal cual sin extension ni nada
    2. Reconfiguramos el paquete del kernel para que refleje el cambio que acabamos de hacer.
    Esto se puede hacer con:

    dpkg-reconfigure paquetedelkernelqueusamos

    Si no conocemos el paquete al cual pertenece el kernel que usamos podemos ejecutar la siguiente linea que nos imprime el paquete que toca y ejecutar el comando anterior

    dpkg -S $(grep vmlinuz /boot/grub/menu.lst | grep ^kernel | cut -d “/” -f 2- | cut -d ” ” -f 1 | head -n $(echo $((`cat /boot/grub/menu.lst | grep ^default | tail -1 | sed -e ‘s/[^0-9]//g’`+1)))) | cut -d “:” -f 1

    3. Listo, en el siguiente reinicio el archivo DSDT será cargado y si es el correcto nuestra bateria y demas funciones de energia funcionarán perfectamente.
    —————————————————————————————————-

    El caso es que he seguido los pasos y no consiguo que funcione. También he probado la solución que has comentado aqui y nada de nada. El ordenador se queda colgado si quito el acpi=off del menu de arranque. ¿sabes qué estoy haciendo mal, o qué podría fallar? Llevo ya unos dias con esto y empieza a desesperarme.

    Un saludo
    javier

  2. Hola

    Ya lo he conseguido arreglar. Tenia un problema con mi smart-card reader que trae mi portatil y que no lo soporta el nucleo que trae hoary. El método que he descrito arriba funciona perfectamente y es todavia más sencillo para los novatos. Espero que le sirva a alquien más.

    Un saludo
    javier

  3. hola javier,
    como has conseguido resolver lo de smart-card reader? tengo un acer aspire 1692wlmi y tengo el mismo problema, no puedo areglar lo de la bateria……

Leave a Reply

Your email address will not be published. Required fields are marked *