7 votos

¿Qué determina las políticas de gestión de la energía en Android?

Me estoy acercando al mundo de los Smart Phone y Android y tengo un par de dudas:

¿Qué módulos (y SW o FW?) deciden las políticas con las que se se da a cualquier componente del teléfono inteligente que lo requiera?

además

¿Los módulos de gestión de la energía en los teléfonos inteligentes están implementados en el sistema operativo Android o en algún firmware especial dedicado?

Evidentemente, la gestión de la energía debe funcionar también si el sistema operativo no está cargado todavía, pero ¿quién es el responsable de ello?

¿Y hasta qué punto puedo modificar la gestión de la energía con una aplicación que se ejecute dentro del SO?

(Espero que estas preguntas no sean Off-Topic, en caso de que puedan dirigirme al sitio correcto de Stack-Exchange)

3voto

daithib8 Puntos 320

La gestión de la energía viene determinada por gobernadores que ajustan la velocidad del reloj de la CPU según el uso. Cada velocidad de reloj funciona a un determinado voltaje y un voltaje más bajo significa menos energía. Si tienes acceso a Root puedes cambiar el regulador y las velocidades de reloj de la CPU permitidas. También hay un estado de reposo en el que la CPU entrará cuando la pantalla esté apagada y no haya nada trabajando en segundo plano. Probablemente hay funciones de carga de la batería con las que no se puede jugar, pero todo lo demás se puede cambiar incluso los voltajes de la cpu y del dsp.

1voto

John Fouhy Puntos 14700

Navegando por foros y sitios encontré las siguientes respuestas a mis dudas. No estoy completamente satisfecho pero me ayudó a entender más.

La gestión de la energía de cada dispositivo depende de algunos suspend / resume políticas que se implementan en el firmware que controla ese dispositivo en particular.

Esto es muy dependiente del dispositivo: cómo y cuándo cada dispositivo se apaga (se suspende) y se despierta (se reanuda) depende de las especificaciones del HW, hay que leer las hojas de datos para entender qué registros particulares deben ser manipulados para suspenderlo/reanudarlo.

Puedes controlar estas cosas a través del software de los drivers de los dispositivos, dentro del código fuente del kernel, accediendo a algunas funciones de la forma <something>_suspend y <something>_resume .

Por ejemplo, del código fuente del núcleo del emulador "goldfish":

en el archivo drivers/video/goldfishfb.c (el controlador responsable de la memoria intermedia de la trama)

#ifdef CONFIG_ANDROID_POWER
static void goldfish_fb_early_suspend(android_early_suspend_t *h)
{
    struct goldfish_fb *fb = container_of(h, struct goldfish_fb, early_suspend);
    writel(1, fb->reg_base + FB_SET_BLANK);
}

static void goldfish_fb_late_resume(android_early_suspend_t *h)
{
    struct goldfish_fb *fb = container_of(h, struct goldfish_fb, early_suspend);
    writel(0, fb->reg_base + FB_SET_BLANK);
}
#endif

Así que el early_suspend escribe un 1 en el registro FB_SET_BLANK para apagar la pantalla, o un 0 para volver a encenderla.

Así que me parece que un proceso en el entorno de ejecución de la aplicación necesita acceder y corromper los drivers de los dispositivos para manipular maliciosamente la gestión de la energía de un dispositivo.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X