ACPI se ha diseñado para hacer posible que el sistema operativo configure y controle los componentes de hardware individuales. ACPI sustituye a los sistemas anteriores PnP y APM. Proporciona información acerca de la batería, el adaptador de CA, la temperatura, el ventilador y los eventos del sistema como, por ejemplo, que se debe cerrar la cubierta o que la batería está baja.
El BIOS proporciona tablas que contienen información acerca de los métodos de acceso al hardware y a los componentes individuales. El sistema operativo se sirve de esta información para tareas como la asignación de interrupciones o la activación y desactivación de componentes. Como el sistema operativo ejecuta los comandos almacenados en el BIOS, el funcionamiento depende de la implementación del BIOS. Las tablas que ACPI puede detectar y cargar se indican en /var/log/boot.msg. Consulte Sección 21.3.4, “Resolución de problemas” para obtener más información acerca de la resolución de los problemas de ACPI.
Si el núcleo detecta un BIOS ACPI al arrancar el sistema, ACPI se activa automáticamente y APM se desactiva. El parámetro de arranque acpi=force puede ser necesario para algunas máquinas antiguas. El equipo debe ser compatible con ACPI 2.0 o posterior. Consulte los mensajes de arranque del núcleo en /var/log/boot.msg para ver si ACPI está activada.
A continuación, es necesario cargar una serie de módulos, de lo que se ocupa el guión de inicio del daemon Powersave. 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 de los módulos, lo que le permite ver qué componentes se han detectado.
En /proc/acpi aparecen ahora varios archivos que informan sobre el estado del sistema o que se pueden usar para modificar algunos de los estados. Algunas funciones no están totalmente operativas, ya que se encuentran todavía en desarrollo y el uso de otras depende en gran medida de la implementación del fabricante.
Todos los archivos (excepto dsdt y fadt) se pueden leer con cat. En algunos archivos, es posible incluso modificar opciones con echo, por ejemplo, echo X > archivo para especificar valores adecuados para X. Para acceder a esta información y a las opciones de control, se recomienda utilizar siempre el comando powersave. A continuación, se describen los archivos más importantes:
/proc/acpi/infoInformación general acerca de ACPI.
/proc/acpi/alarmAquí se especifica cuándo debe activarse el sistema después de haber estado en reposo. Por ahora, esta función no se admite totalmente.
/proc/acpi/sleepProporciona información acerca de los posibles estados de reposo.
/proc/acpi/event
Aquí se registran los eventos y el daemon Powersave los procesa (powersaved). Si ningún daemon accede a este archivo, los eventos (como, por ejemplo, presionar el botón de encendido o cerrar la cubierta) se podrán leer con cat /proc/acpi/event (se sale de ellos con Ctrl-C).
/proc/acpi/dsdt y /proc/acpi/fadt
Estos archivos contienen las tablas ACPI DSDT (tabla de descripción de sistemas diferenciados, del inglés Differentiated System Description Table) y FADT (tabla de descripción de ACPI fija, del inglés Fixed ACPI Description Table). Dichas tablas 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/stateMuestra si está conectado el adaptador de CA.
/proc/acpi/battery/BAT*/{alarm,info,state}
Información detallada sobre el estado de la batería. Para conocer el nivel de carga, es necesario comparar el valor de last full capacity (última capacidad total) de info (información) con el de remaining capacity (capacidad restante) de state (estado). Una forma más fácil de hacerlo es usar alguno de los programas especiales que se describen en Sección 21.3.3, “Herramientas de ACPI”. El nivel de carga que provocará que se desencadene un evento se puede especificar en alarm (alarma).
/proc/acpi/buttonEste directorio contiene información sobre diversos conmutadores.
/proc/acpi/fan/FAN/state
Muestra si el ventilador está funcionando en ese momento. Puede activar o desactivar el ventilador automáticamente escribiendo en este archivo 0 (encender) o 3 (apagar). No obstante, hay que tener en cuenta que tanto el código ACPI del núcleo como el hardware (o el BIOS) hacen caso omiso de estos valores cuando la temperatura es demasiado elevada.
/proc/acpi/processor/*Se crea un subdirectorio independiente para cada CPU incluida en el sistema.
/proc/acpi/processor/*/infoInformación sobre las posibilidades de ahorro de energía del procesador.
/proc/acpi/processor/*/power
Información sobre el estado actual del procesador. Un asterisco junto a C2 significa que el procesador está inactivo, que es el estado más frecuente, como puede apreciarse por el valor de usage (uso).
/proc/acpi/processor/*/throttlingSe puede utilizar para limitar el reloj del procesador. Normalmente, esto se puede hacer en 8 niveles. Esta opción es independiente del ajuste de la frecuencia de la CPU.
/proc/acpi/processor/*/limitSi el rendimiento (obsoleto) y las limitaciones se controlan de forma automática mediante un daemon, se pueden especificar aquí los límites máximos. Existen algunos límites fijados por el sistema y otros establecidos por el usuario.
/proc/acpi/thermal_zone/Hay un subdirectorio independiente para cada zona térmica. Una zona térmica es un área con propiedades térmicas semejantes, cuyo número y nombre están diseñados por el fabricante del hardware. No obstante, muchas de las posibilidades que ofrece ACPI no se llegan a implementar nunca. En su lugar, el BIOS se ocupa normalmente de controlar la temperatura sin que el sistema operativo intervenga, ya que lo que está en juego aquí es la duración del hardware. En consecuencia, algunos de los archivos siguientes sólo tienen valor en la teoría.
/proc/acpi/thermal_zone/*/temperatureLa 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 active (activa) o passive (pasiva). En los casos en los que el control del ventilador no depende de ACPI, el estado es siempre ok.
/proc/acpi/thermal_zone/*/cooling_modeSeleccione el método de refrigeración controlado por ACPI. Puede optar por el modo pasivo (menor rendimiento pero más económico) o por el activo (máximo rendimiento, pero el ventilador hace ruido).
/proc/acpi/thermal_zone/*/trip_points
Permite establecer la temperatura a partir de la cual se deben realizar acciones específicas en el equipo como, por ejemplo, la refrigeración activa o pasiva, la suspensión (cuando el estado es hot [caliente]) o el apagado (cuando el estado es critical [crítico]). Las acciones posibles se encuentran definidas en DSDT en función del dispositivo. Los puntos que se determinan en la especificación ACPI son: critical (crítico), hot (caliente), passive (pasivo), active1 (activo1) y active2 (activo2). Aunque no estén implementados todos ellos, es necesario especificarlos en este orden en el archivo. Por ejemplo, la entrada echo 90:0:70:0:0 > trip_points asigna a la temperatura un valor critical (crítico) de 90 grados y un valor passive (pasivo) de 70 grados (todas las temperaturas se miden en grados Celsius).
/proc/acpi/thermal_zone/*/polling_frequency
Si el valor de temperature (temperatura) no se actualiza automáticamente cuando cambia la temperatura, puede cambiar al modo de sondeo aquí. El comando echo X > /proc/acpi/thermal_zone/*/polling_frequency hace que se consulte la temperatura cada X segundos. Si X=0 se inhabilitará el sondeo.
Las opciones de configuración, la información y los eventos mencionados no requieren una edición manual. Para ello, se puede utilizar el daemon Powersave (powersaved) y distintas aplicaciones como powersave, kpowersave y wmpowersave. Consulte la Sección 21.3.3, “Herramientas de ACPI”. Puesto que powersaved incluye ahora las funciones de la antigua aplicación acpid, esta última ha dejado de utilizarse.
Existen tres métodos de ahorro de energía para la CPU. Dependiendo del modo de funcionamiento del equipo, estos métodos se pueden combinar también entre sí. El ahorro de energía también significa que el sistema se calienta menos y, por lo tanto, el ventilador debe activarse con menos frecuencia.
PowerNow! y Speedstep son los nombres que han establecido las empresas AMD e Intel para esta tecnología que, por otra parte, incorporan también los procesadores de otros fabricantes. Este método consiste en reducir conjuntamente la frecuencia del reloj de la CPU y su voltaje central, con lo cual se consigue un ahorro de energía superior al lineal. Esto significa que con la mitad de la frecuencia (es decir, a medio rendimiento) se requiere mucho menos de la mitad de energía. Esta tecnología funciona independientemente de APM y de ACPI y requiere un daemon que ajuste la frecuencia y los requisitos de rendimiento actuales. Los ajustes se pueden realizar en el directorio /sys/devices/system/cpu/cpu*/cpufreq/.
Esta tecnología consiste en omitir un porcentaje determinado de los impulsos de la señal del reloj para la CPU. Con una limitación del 25%, se omite uno de cada cuatro impulsos; mientras que con una reducción del 87,5%, sólo uno de cada ocho impulsos llega al procesador. No obstante, el ahorro de energía es algo menor que el lineal. Normalmente, esta técnica se aplica solamente cuando no está disponible el ajuste de la frecuencia o para lograr el máximo ahorro de energía. Por otra parte, esta técnica requiere un proceso propio que la controle. La interfaz del sistema es /proc/acpi/processor/*/throttling.
El sistema operativo pone el procesador en estado de reposo cuando no hay ningún tipo de actividad. En este caso, el sistema operativo envía a la CPU el comando halt. Existen tres niveles: C1, C2 y C3. En el estado de máximo ahorro de energía (C3), se detiene incluso la sincronización del caché del procesador con la memoria principal, por lo que este estado se adopta únicamente cuando no existe ningún dispositivo que modifique el contenido de la memoria principal a través de la actividad maestra del bus. Algunos controladores no permiten el uso de C3. El estado actual se muestra en /proc/acpi/processor/*/power.
El ajuste de la frecuencia y las limitaciones son sólo relevantes cuando el procesador está ocupado, ya que, si éste se encuentra inactivo, se utiliza de todas formas el estado C más económico. Si la CPU está ocupada, el ajuste de la frecuencia es el mejor método para ahorrar energía. A menudo, el procesador no trabaja al máximo de su capacidad y basta con bajar su frecuencia. En la mayoría de los casos, el método más adecuado consiste en un ajuste dinámico de la frecuencia por medio de un daemon como, por ejemplo powersaved. Cuando el equipo funciona con baterías o debe mantener una baja temperatura y hacer poco ruido, se recomienda establecer un ajuste estático a baja frecuencia.
La función de limitación debería utilizarse como último recurso, por ejemplo, para prolongar el tiempo de funcionamiento con baterías a pesar de que el sistema esté trabajando a pleno ritmo. No obstante, algunos sistemas no funcionan correctamente si la limitación aplicada es demasiado estricta. Por otra parte, la limitación de la CPU no sirve de nada cuando ésta tiene poca actividad.
En SUSE Linux, estas técnicas se controlan a través del daemon powersave. La configuración se describe en Sección 21.5, “Paquete powersave”.
ACPI cuenta con una serie de herramientas más o menos completas. Entre ellas se encuentran las herramientas puramente informativas que muestran el estado de la batería o la temperatura (acpi, klaptopdaemon, wmacpimon, etc.); las que facilitan el acceso a estructuras en /proc/acpi; las que ayudan a monitorizar cambios (akpi, acpiw o gtkacpiw) y, por último, las que permiten editar las tablas ACPI en el BIOS (paquete pmtools).
Se puede distinguir entre dos tipos de problemas. Por una parte, puede haber fallos en el código ACPI del núcleo que no se hayan detectado a tiempo. En este caso, se proporcionará una solución para que la descargue. Los otros problemas son los más frecuentes: los que están causados por el BIOS. En algunos casos, se integran a propósito en el BIOS desviaciones de las especificaciones de ACPI para evitar fallos en la implementación ACPI en otros sistemas operativos de uso extendido. Existen también componentes de hardware con fallos graves en la implementación ACPI, por lo que se han incluido en una "lista negra" para impedir que el núcleo de Linux utilice en ellos ACPI.
Si surgen problemas, en primer lugar se debe actualizar el BIOS. Si el equipo no arrancar en absoluto, pruebe a utilizar algunos de los siguientes parámetros de arranque:
No utilizar ACPI para configurar los dispositivos PCI.
Ejecutar sólo una configuración de recursos simples. No utilizar ACPI para otros propósitos.
Inhabilita la ACPI.
![]() | Problemas al arrancar sin ACPI |
|---|---|
Algunos equipos nuevos, especialmente los sistemas SMP y AMD64, requieren ACPI para que el hardware se configure correctamente. Por lo tanto, el desactivar ACPI puede ocasionar problemas. | |
Monitorice los mensajes de arranque del sistema con el comando dmesg | grep -2i acpi después del arranque. También puede monitorizar todos los mensajes, ya que puede que el problema no esté causado por ACPI. Si ocurre un error durante el análisis de una tabla ACPI, la tabla más importante (que es DSDT) puede sustituirse por una versión mejorada. En estas circunstancias, se hace caso omiso de la tabla DSDT defectuosa del BIOS. El procedimiento se describe en Sección 21.5.4, “Resolución de problemas”.
En la configuración del núcleo existe un conmutador para activar los mensajes de depuración de ACPI. Si se ha compilado e instalado un núcleo con depuración ACPI, esta información detallada puede servir de ayuda a los técnicos que traten de identificar el error.
Si se producen problemas con el hardware o el BIOS, es aconsejable ponerse en contacto con los fabricantes. A menudo, los fabricantes no proporcionan asistencia si se trata de Linux, por lo que es importante que tomen conciencia de los distintos problemas. No se tomarán el asunto en serio hasta que se den cuenta de que un número importante de sus clientes utiliza Linux.
Puede obtener información adicional y material de ayuda sobre ACPI:
http://www.cpqlinux.com/acpi-howto.html (información detallada sobre procedimientos de ACPI y revisiones para DSDT)
http://www.intel.com/technology/iapc/acpi/faq.htm (preguntas frecuentes sobre ACPI de @Intel)
http://acpi.sourceforge.net/ (el proyecto ACPI4Linux en Sourceforge)
http://www.poupinou.org/acpi/ (revisiones de DSDT de Bruno Ducrot)