2010-06-22 14 views
12

Planeo desarrollar una pequeña y agradable aplicación que se ejecutará en una plataforma Linux embebida basada en un brazo; sin embargo, dado que la plataforma estará alimentada por baterías, estoy buscando información relevante sobre cómo manejar el ahorro de energía.¿Cómo hacer un ahorro de energía en un sistema Embedded Linux basado en ARM?

Es importante obtener un tiempo de batería decente.

Creo que el kernel de Linux implementó algo de soporte para esto, pero no puedo encontrar ninguna documentación sobre este tema.

  • Cualquier entrada sobre cómo diseñar mi programa y el sistema es bienvenido.

  • Cualquier entrada sobre cómo el kernel de Linux intenta resolver este tipo de problema también es bienvenida.

Otras preguntas:

  • ¿Cuánto cuesta el programa en el espacio de usuario tienen que hacer?

  • ¿Y necesita modificar el kernel?

  • ¿Qué llamadas al sistema kernel o API son buenas de conocer?


actualización:

parece que la gente que intervienen en el sitio de "electrones libres" se han producido algunas presentaciones agradables sobre este tema.

Pero tal vez alguien más tiene aún más información sobre este tema?


actualización:

Parece que la idea de Adam Shiemke que ir a buscar en el proyecto MeeGo puede ser el mejor en lo que va de punta.

Puede ser el mejor proyecto de Linux embebido con batería disponible en este momento.

Y Nokia suele ser bueno en este tipo de cosas.


actualización:

Uno tiene que tener cuidado con Android, ya que tiene un núcleo de Linux "modificado" en la parte inferior, y algunas de las cosas que la gente de Google han hecho no utilice la línea de base/kernels Linux normales.Creo que algunas de sus ideas de administración de energía podrían ser problemáticas para reutilizar para otros proyectos.

Respuesta

9

No he hecho esto, pero tengo experiencia con los dos apartados (Linux y administración de energía integrada). Hay dos distribuciones principales de Linux que se me ocurren al pensar en la administración de energía, Android y MeeGo. MeeGo usa (hasta donde puedo decir) un kernel 2.6 no modificado con algunos extras colgando. No pude encontrar mucho sobre exactamente cuál es su estrategia de administración de energía, aunque sospecho que saldrá más sobre ella en el futuro cercano a medida que el producto se acerca a su madurez.

Sin embargo, hay mucha más información disponible en Android. Tienen un núcleo 2.6 bastante modificado. Puede ver un poco sobre las diferentes estrategias implementadas en http://elinux.org/Android_Power_Management (así como en kernel drama). Algunos otros enlaces:

https://groups.google.com/group/android-kernel/browse_thread/thread/ee356c298276ad00/472613d15af746ea?lnk=raot&pli=1

http://www.ok-labs.com/blog/entry/context-switching-in-context/

Estoy seguro de que usted puede encontrar más enlaces de esta naturaleza. Dado que ambos proyectos son de código abierto, puede obtener el código del kernel y probablemente obtener más información de personas que realmente saben de qué están hablando en formularios y grupos.

En el nivel del controlador, debe asegurarse de que los controladores puedan manejar correctamente los dispositivos de suspensión y apagado que no están en uso. La mayoría de los dispositivos orientados al mercado móvil ofrecen soporte muy preciso para desactivar componentes individuales y ajustar la configuración del reloj (recuerde que la potencia es proporcional al reloj^2).

Espero que esto ayude.

+0

+1 para MeeGo (y Maemo) – Johan

4

Puede ahorrar bastante energía sin requerir ningún soporte especial del sistema operativo, suponiendo que está escribiendo (o al menos tiene el código fuente) su aplicación y controladores.

Sus controladores deben poder deshabilitar sus dispositivos asociados y restaurarlos sin necesidad de reiniciar o introducir inestabilidad en el sistema. Si sus dispositivos están conectados a un bus PCI/PCIe, investigue qué estados de alimentación admiten (D0 - D3) y qué necesita hacer su conductor para realizar la transición entre estos modos de baja potencia. Si está seleccionando dispositivos de hardware para usar, busque dispositivos que cumplan con la especificación de administración de energía PCI o que tengan una funcionalidad similar (como un modo de suspensión y una señal de interrupción de "activación").

Cuando su dispositivo se inicia, cada dispositivo que tiene la capacidad de detectar si está conectado a algo necesita hacerlo. Si algún puerto o autobús detecta que no se están utilizando, apáguelos o duerma. Un puerto que funcione a plena potencia pero que permanezca sin utilizar puede desperdiciar más energía de la que podría imaginarse. Dependiendo de su hardware particular y caso de uso, también podría ser útil tener una aplicación en segundo plano que monitoree el uso del dispositivo, identifique los recursos no utilizados/inactivos y actúe de manera adecuada (como un "protector de pantalla" para su hardware).

El software de su aplicación debe asegurarse de detectar si los dispositivos de hardware están encendidos antes de intentar usarlos. Si necesita acceder a un dispositivo que se puede colocar en un modo de bajo consumo de energía, su aplicación debe ser capaz de manejar un retraso potencialmente prolongado a la espera de que el dispositivo se active y responda. Sus aplicaciones también deben tener en cuenta la necesidad de dormir de un dispositivo. Si necesita enviar una serie de comandos a un dispositivo de hardware, intente almacenarlos en búfer y enviarlos de una sola vez en lugar de espaciarlos y requerir múltiples ciclos de activación de despertar-> enviar->.

No tengas miedo de subestimar un poco los componentes de tu sistema. Además de ahorrar energía, esto puede ayudarlos a funcionar más fríos (lo que requiere menos energía para el enfriamiento).He visto algunos diseños que usan una CPU que es más poderosa de lo necesario por un margen decente, que luego se reduce en un 40% (reduciendo el rendimiento al nivel original pero a una fracción del costo de la energía) . Además, no tengas miedo de gastar energía para ahorrar energía. Es decir, no tema usar dispositivos de hardware de supervisión de tiempo de CPU para oportunidades de desactivarlos/hibernarlos (incluso si esto hará que su CPU use un poco más de potencia). La mayoría de las veces, este intercambio resulta en un ahorro neto de energía.

-1

No es realmente su tema, pero puede ser útil para registrar su progreso: estaba buscando probar/medir mi sistema embebido de Linux. Desjardins Chris de este foro me recomendó este:

he utilizado con éxito bootchart en el pasado:

http://elinux.org/Bootchart

Aquí está una lista de otras cosas que también puede ayudar:

http://elinux.org/Boot_Time

+0

-1, esta respuesta no ayuda de ninguna manera con respecto a la pregunta. ¿Se suponía que era un comentario? – aditya

Cuestiones relacionadas