epelpad

¿Qué es ACPI?

¿Qué es ACPI?


¿Qué es ACPI?

Tal como podemos leer en la página de ACPI Specification, las siglas ACPI hacen referencia a Advanced Configuration & Power Interface, y es una especificación desarrollada por varias empresas como Compaq, Intel, Microsoft, Phoenix y Toshiba.
Esta especificación define unos interfaces estádares dirigidos al sistema operativo para la administración de energía en nuestros equipos. Es decir, es una abstracción de los mecanismos hardware de administración de energía a ser usado por el sistema operativo.

Haciendo que nuestro sistema utilice ACPI

Tan solo necesitaremos dos pasos para habilitar el uso de ACPI. Lo primero será activar el soporte ACPI en la BIOS de nuestro ordenador. Esto depende de cada fabricante, así que deberás consultar la documentación de tu placa para saber como acceder a la BIOS de la misma. Puede darse el caso de que nuestra BIOS no soporte ACPI. En ese caso poco podemos hacer . Deberemos buscar métodos alternativos de administración de energía, como APM, por ejemplo.
El segundo paso requiere la recompilación de nuestro núcleo, para hacer que nuestro sistema interactúe con el interfaz proporcionado por ACPI. Como siempre sucede en estos casos, lo mejor que podemos hacer es acudir al Kernel HOWTO, aunque se intentará dar aquí un resumen del proceso.
Primero acudimos a kernel.org, desde donde nos podremos descargar la última versión estable del núcleo (a la hora de redactar este documento, dicha versión era la 2.4.18). El archivo .tar.gz conteniendo las fuentes del núcleo deberá ser descomprimido y desempaquetado en el directorio /usr/src/linux, por lo que si teníamos dicho directorio ocupado, lo moveremos a cualquier lugar (por ejemplo, a /usr/src/linux-old) mediante el comando mv. Trasladamos el archivo linux-2.4.18.tar.gz a /usr/src/, y lo descomprimimos de la siguiente forma:

tar -xvzf linux-2.4.18.tar.gz

Dentro de /usr/src/linux ejecutamos make menuconfig (o make xconfig si nos encontramos en el entorno gráfico) y configuramos el núcleo según las características de nuestro sistema. Un buen truco en este caso, si ya habíamos compilado un núcleo anteriormente (de la misma serie, es decir, un núcleo 2.4.X), es copiar el archivo .config de las fuentes de dicho nucleo al directorio /usr/src/linux y tras ello hacer el make menuconfig, por lo que conservaremos nuestra configuración anterior. Si es la primera vez que compilamos el núcleo siempre podemos hacer un make oldconfig.
En el caso concreto de ACPI, tras ejecutar make menuconfig, seleccionamos General Setup, y dentro del menú que nos aparecerá seleccionamos (incluyendo en el núcleo, NO como módulo) ACPI support, y ACPI Bus Manager así como todas las subopciones que aparecen tras seleccionar esta última. Esta segunda característica nos permitirá que el sistema interprete los eventos relacionados con ACPI por medio del demonio acpid, del que hablamos más adelante.
Una vez hecho esto, una forma de compilar el núcleo es ejecutar lo siguiente:

make dep
make clean
make bzImage
make modules
make modules_install


Por último copiamos el nuevo kernel, normalmente situado para un procesador x86 en usr/src/linux/arch/i386/boot/bzImage, al directorio /boot, y creamos una entrada en LILO o GRUB (según el gestor de arranque que utilicemos; consultar la documentación para cada uno).
Y eso es todo. Para comprobar que el soporte para ACPI ya existe, tras arrancar con el nuevo núcleo, ejecutamos halt y vemos si tras el mensaje de Power down la máquina se apaga de forma automática.

El demonio acpid

Si solo nos limitamos a hacer lo anterior estaremos desaprovechando las funcionalidades que nos puede ofrecer ACPI de manejar ciertos eventos. Por ejemplo, podríamos hacer que al pulsar el botón de apagado de nuestra máquina, se ejecutase halt automáticamente, con lo que no habría peligro de que alguien cerrara el sistema de forma incorrecta. Este manejo de eventos se puede llevar a cabo utilizando el demonio acpid, cuyas fuentes podemos obtener en http://acpid.sourceforge.net. Tal como se indica en la página de este proyecto, necesitaremos parchear nuestro núcleo si éste es anterior a la versión 2.4.10, pero si hemos instalado la última versión siguiendo las indicaciones anteriores, nos podremos saltar este paso. La instalación se puede hacer de diversas maneras:

power Si utilizamos Debian, tan solo deberemos hacer un apt-get install acpid, para que este paquete quede instalado y configurado.
Advanced Si utilizamos Red Hat o alguna distribución que utilice el sistema de paquetes rpm, nos descargamos desde la página del proyecto acpid el rpm correspondiente a la última versión, y lo instalamos ejecutando rpm -Uvh acpid-version.rpm, donde version será el número de versión así como la arquitectura correspondientes.
Interface Por último, podemos hacer una instalación a partir de las fuentes. Descargamos acpid-1.0.1.tar.gz (las fuentes de la última versión a la hora de redactar este documento), lo copiamos a un directorio temporal, y lo descomprimimos con:

tar -xvzf acpid-1.0.1.tar.gz

Para compilarlo nos introducimos en el directorio acpid-1.0.1, tecleamos make, y nos introducimos en el directorio Debian o RedHat (según nuestra distribución) y consultamos el README correspondiente para ver como terminar de configurarlo para nuestro equipo.

Tras la instalación, acpid debería ser iniciado durante el arranque. Abrirá un fichero de eventos (/proc/acpi/event por defecto) e intentará leer líneas de dicho fichero, correspondientes a eventos. Cuando se reciba un evento, se comprobará una serie de reglas y se ejecutará aquella que se corresponda con el evento producido.
Las reglas estarán definidas en unos archivos de configuración, por defecto situados en /etc/acpi/events/. Cada fichero deberá definir dos elementos, un evento y una acción. Cualquier línea en blanco o línea que comience por # será ignorada. Cada línea, a su vez, tiene tres elementos: un identificador, un símbolo de igual, y un valor.
El valor del evento será una expresión regular con la que se comparará el evento leido de /proc. El valor de la acción será un comando, que será invocado mediante /bin/sh cuando el evento correspondiente se produzca. Los carácteres especiales de este comando serán preservados, excepto la cadena "%e", que será reemplazada por el texto literal del evento para el cual la acción fue invocada. Por tanto, si deseamos utilizar el símbolo %, deberemos escaparlo usando "%%".
Al instalar acpid se incluye un ejemplo, encargado de apagar nuestro sistema automáticamente cuando se pulse el botón de apagado. Se incluye tanto el archivo de configuración /etc/acpi/events/powerbtn, que relaciona el evento de pulsado del botón de encendido/apagado:

event=button[ /]power
action=/etc/acpi/powerbtn.sh


Como el propio script llamado cuando se pulsa el botón (/etc/acpi/powerbtn.sh):

/sbin/init 0

Para consultar los eventos que podemos capturar, podemos echarle un vistazo a la ayuda de las opciones del menú de configuración del núcleo dependientes de General Setup->ACPI Support->ACPI Bus Manager (recordemos que se accede a este menú ejecutando make menuconfig en /usr/src/linux). Por ejemplo, si nuestro ordenador dispone de botón sleep, podrímos usar el evento button[ /]sleep, o en el caso de portátiles, podriamos controlar el sobrecalentamiento con el evento thermal.

ACPI

0 comentarios - ¿Qué es ACPI?