8.3. ACPI

ACPI significa Advanced Configuration and Power Interface. La función de ACPI es permitir al sistema operativo configurar y controlar cada componente de hardware por separado. De este modo, ACPI sustituye tanto a “Plug and Play” como a APM. Asimismo, ACPI proporciona diversos datos sobre la batería, interfaz de red, temperatura y ventilador e informa de acontecimientos en el sistema como “Cerrar la cubierta” o “Baterías poco cargadas”.

La BIOS dispone de tablas donde se recoge información sobre cada componente y sobre los métodos para acceder al hardware. El sistema operativo utiliza esta información, por ejemplo, para asignar Interrupts o para activar y desactivar componentes de hardware. No obstante, debido a que el sistema operativo sigue las instrucciones almacenadas en la BIOS, aquí también se está supeditado a la implementación de la BIOS. Los mensajes producidos durante el arranque se almacenan en /var/log/boot.msg. Allí, ACPI informa de qué tablas ha encontrado y evaluado con éxito. Para obtener más información sobre la resolución de problemas en ACPI consulte el apartado 8.3.1.3, “Posibles problemas y soluciones”.

8.3.1. ACPI en la práctica

Cuando el kernel reconoce una BIOS ACPI durante el arranque, ACPI es activado automáticamente (y APM desactivado). El parámetro de arranque acpi=on podría ser necesario, como máximo, en máquinas antiguas. No obstante, el ordenador tiene que soportar ACPI 2.0 o superior. Para comprobar si ACPI está activado, consulte los mensajes de arranque del kernel en /var/log/boot.msg. También existe un directorio /proc/acpi que se explicará más adelante.

A continuación es necesario cargar una serie de módulos, de lo que se ocupa el script de inicio del daemon ACPI. Si alguno de estos módulos causa problemas, puede impedirse su carga o descarga en /etc/sysconfig/powersave/common. En el registro del sistema (/var/log/messages) se encuentran los mensajes del módulo y puede observarse qué componentes han sido detectados.

En /proc/acpi aparecen ahora varios archivos que informan sobre el estado del sistema o permiten modificar de forma activa algunos de estos estados. No obstante, esta funcionalidad no es ni mucho menos completa porque, o bien está todavía en desarrollo, o bien depende de lo que haya implementado el fabricante.

Se puede leer todos los archivos (excepto dsdt y fadt) con cat. En algunos se puede incluso modificar opciones pasando a X valores adecuados con echo X <archivo>. (Todo lo que se encuentra en /proc no son archivos en el disco duro sino más bien una interfaz al kernel). A continuación se describen los archivos más importantes:

/proc/acpi/info

Información general sobre ACPI

/proc/acpi/alarm

Aquí puede definirse cuándo el sistema despierta de un estado de sueño. El soporte actual de esta función es insuficiente.

/proc/acpi/sleep

Proporciona información sobre los posibles estados de sueño.

/proc/acpi/event

Aquí se registran los eventos del sistema. Estos son procesados por daemons como acpid o powersaved. Si no interviene ningún daemon, los eventos de pueden leer con cat /proc/acpi/event (salir con Ctrl + C). Un ejemplo de evento es pulsar el interruptor principal o cerrar la cubierta del portátil.

/proc/acpi/dsdt y /proc/acpi/fadt

Aquí se almacenan las tablas ACPI DSDT (Differentiated System Description Table) y FADT (Fixed ACPI Description Table). Estas pueden leerse con acpidmp, acpidisasm y dmdecode. Puede encontrar estos programas junto con la correspondiente documentación en el paquete pmtools. Por ejemplo: acpidmp DSDT | acpidisasm.

/proc/acpi/ac_adapter/AC/state

¿Está conectado el adaptador de red?

/proc/acpi/battery/BAT*/{alarm,info,state}

Contienen abundante información sobre el estado de la batería. Para comprobar el nivel de carga es necesario comparar last full capacity de info con remaining capacity de state. Aunque esto también puede hacerse más fácilmente con la ayuda de programas especiales que se describirán más adelante. En alarm se puede introducir qué cantidad de carga provocará un evento en la batería.

/proc/acpi/button

Este directorio contiene información sobre diversos interruptores.

/proc/acpi/fan/FAN/state

Muestra si el ventilador está funcionando en ese momento. También puede encenderse o apagarse manualmente escribiendo en el archivo 0 (=encender) ó 3 (=apagar). No obstante, hay que tener en cuenta que tanto el código ACPI del kernel como el hardware (o la BIOS) sobreescriben estos valores cuando la temperatura es demasiado elevada.

/proc/acpi/processor/CPU*/info

Información sobre las posibilidades de ahorro de energía del procesador.

/proc/acpi/processor/CPU*/power

Información sobre el estado actual del procesador. Un asterisco en C2 significa inactividad y es el estado más frecuente, como puede apreciarse en el número usage.

/proc/acpi/processor/CPU*/performance

Esta interfaz ya no se utiliza.

/proc/acpi/processor/CPU*/throttling

Permite aumentar de forma lineal el ahorro de energía del procesador. Esta interfaz ha quedado obsoleta y su función la desempeñan ahora las opciones de configuración en /etc/sysconfig/powersave/common (véase a este respecto el apartado 8.5.2.3, “Ajuste del consumo de energía”).

/proc/acpi/processor/CPU*/limit

Si un daemon se encarga de regular automáticamente la potencia y el throttling, aquí se pueden definir los límites que no se deben sobrepasar en ningún caso. Existen algunos límites que fija el sistema y otros que fija el usuario. La función de esta interfaz la desempeñan ahora las opciones de configuración en /etc/sysconfig/powersave/common (véase a este respecto el apartado 8.5.2.2, “Estados de la batería definidos por el usuario”).

/proc/acpi/thermal_zone/

Aquí se encuentra un subdirectorio para cada zona térmica. Una zona térmica es una sección con características térmicas semejantes, cuyo número y nombre de fabricante de hardware puede ser seleccionado. Muchas de las posibilidades ofrecidas por ACPI se implementan rara vez. En su lugar, la BIOS se ocupa normalmente de controlar la temperatura sin que el sistema operativo intervenga, ya que aquí se trata nada menos que de la duración del hardware. Por lo tanto, las descripciones siguientes son en parte puramente teóricas.

/proc/acpi/thermal_zone/*/temperature

La temperatura actual de la zona térmica.

/proc/acpi/thermal_zone/*/state

El estado indica si todo está en orden (ok) o si (ACPI) refrigera de forma activa o pasiva. En los casos donde el control del ventilador no depende de ACPI, el estado es siempre ok.

/proc/acpi/thermal_zone/*/cooling_mode

Bajo un control total por parte de ACPI, aquí se puede seleccionar el método de refrigeración preferido: pasivo (menor rendimiento pero mayor ahorro) o activo (siempre máximo rendimiento pero con el ruido del ventilador a toda potencia).

/proc/acpi/thermal_zone/*/trip_points

Aquí se puede definir la temperatura a partir de la cual se emprende alguna acción. Esta acción puede abarcar desde la refrigeración activa o pasiva hasta apagar el ordenador (critical), pasando por suspend (hot).

/proc/acpi/thermal_zone/*/polling_frequency

Si el valor de temperature no se actualiza automáticamente cuando se modifica la temperatura, se puede cambiar aquí al modo polling. El comando echo X > /proc/acpi/thermal_zone/*/polling_frequency hace que cada X segundos se pregunte la temperatura. El modo polling se desconecta con X=0.

8.3.1.1. El daemon ACPI (acpid)

De forma semejante al daemon APM, el daemon ACPI procesa determinados eventos ACPI, tales como los que activan el encendido y apagado o el contacto de la tapa. Todos los acontecimientos quedan registrados en el log del sistema. En /etc/sysconfig/powermanagement con las variables ACPI_BUTTON_POWER y ACPI_BUTTON_LID se puede establecer qué debe ocurrir en esos acontecimientos. Si no es suficiente, puede adaptar el script /usr/sbin/acpid_proxy o cambiar la configuración de acpid en /etc/acpi/.

Al contrario que en apmd, aquí no hay muchas opciones preconfiguradas ya que ACPI para Linux está todavía en pleno desarrollo. Dado el caso, es necesario configurar acpid por sí mismo. Puede enviarnos sus sugerencias de acciones preconfiguradas a http://www.suse.de/feedback.

8.3.1.2. Otras herramientas

Existe una serie de herramientas ACPI más o menos completas. Entre ellas se encuentran herramientas puramente informativas que muestran el estado de la batería o la temperatura (acpi, klaptopdaemon, wmacpimon, etc.). Otras facilitan el acceso a las estructuras bajo /proc/acpi o ayudan a observar cambios (akpi, kacpi, gtkacpiw), y otras permiten editar las tablas ACPI en la BIOS (paquete pmtools).

8.3.1.3. Posibles problemas y soluciones

Se puede distinguir entre dos tipos de problemas. Por una parte, puede haber fallos en el código ACPI del kernel que no se han detectado a tiempo. En este caso se proporcionará una solución para descargar. Otros problemas más incómodos y, por desgracia, también más frecuentes, son los problemas en la BIOS del ordenador. Se da incluso el caso de que se integran en la BIOS desviaciones de las especificaciones ACPI para evitar fallos en la implementación ACPI en otros sistemas operativos de uso extendido. Existe también hardware en el que se conocen fallos graves en la implementación ACPI. Por este motivo, estos componentes de hardware se incluyen en una lista negra para que el kernel de Linux no utilice en ellos ACPI.

En caso de problemas, en primer lugar se debe actualizar la BIOS, lo que funciona con éxito en muchas ocasiones. Si el ordenador ni siquiera arranca correctamente, pruebe a utilizar algunos de los siguientes parámetros de arranque:

pci=noacpi

No utilizar ACPI para configurar los dispositivos PCI.

acpi=oldboot

Ejecutar sólo recursos simples de configuración, en caso contrario no utilizar ACPI.

acpi=off

No utilizar ACPI en absoluto.

[Warning]Problemas al arrancar sin ACPI

Algunos ordenadores de última generación, especialmente los sistemas SMP y AMD64M, requieren ACPI para que el hardware se configure correctamente. Por lo tanto, el desactivar ACPI puede ocasionar problemas.

Es muy importante examinar los mensajes de arranque cuidadosamente. Para ello lo mejor es utilizar el comando dmesg | grep -2i acpi después del arranque (o incluso examinar todos los mensajes, ya que el problema no debe radicar necesariamente en ACPI). Si ocurre un error durante el análisis sintáctico de una tabla ACPI, existe la posibilidad (al menos para la tabla más importante, DSDT) de pasar una versión mejorada al sistema. De esta forma la tabla DSDT incorrecta de la BIOS será ignorada. El proceso correspondiente se describe en el apartado 8.5.4, “Resolución de problemas”.

En la configuración del kernel existe un botón para activar los mensajes de depuración de ACPI. Si se ha compilado e instalado un kernel con depuración ACPI, puede ayudar con información detallada a los expertos que busquen un posible fallo.

En cualquier caso, siempre resulta una buena idea ponerse en contacto con el fabricante del aparato si ocurriesen problemas con el hardware o la BIOS. Aún cuando los fabricantes no siempre pueden ayudar cuando se trata de Linux, es importante que escuchen el término Linux lo más a menudo posible. No tomarán a Linux en serio hasta que no se den cuenta de que un número importante de sus clientes lo utilizan. Aunque no tenga ningún problema, tampoco está de más que informe al fabricante de su hardware de que lo usa con Linux.

Puede encontrar ayuda y documentación adicional (en inglés) en: