De hecho, sin quitar la batería no es posible apagar un dispositivo completamente para evitar la pérdida que podría ocurrir debido a un cortocircuito causado por el agua.
Echemos un vistazo breve a lo que significa apagar y cuáles son las posibles opciones para lograrlo.
¿CÓMO FUNCIONA EL APAGADO?
Android se basa en el kernel de Linux que es el primer ejecutable del sistema operativo que se ejecuta durante el proceso de arranque. El kernel inicializa el hardware necesario y prepara un entorno básico antes de ejecutar init
, el primer proceso de espacio de usuario que podemos ver. Es init
el que luego inicia y se encarga de todos los servicios y procesos. En el apagado, ocurre lo contrario.
INIT
Cuando pulsas Apagar
desde el Menú de Energía, o cuando emites el comando reboot -p
desde una aplicación de terminal o adb
, se configura la propiedad de Android sys.powerctl
a shutdown
(con un motivo opcional para el apagado) lo que le dice a init
que es hora de guardar cualquier trabajo sin guardar en el almacenamiento persistente, detener todos los servicios y procesos de manera segura (o brutal), sincronizar las cachés del sistema de archivos, desmontar los sistemas de archivos y luego pasar la carga al kernel haciendo la llamada al sistema reboot (ref). El kernel luego se asegura de que todos los procesos de espacio de usuario se detengan, incluido init
, desmonta a la fuerza cualquier sistema de archivos obstinado y, en última instancia, apaga los dispositivos de hardware, incluidas las CPUs y la RAM.
init
de Android admite dos modos: shutdown
y reboot
. El init
de Linux tiene algunas opciones más de apagado, incluidas halt
y poweroff
. Consulta esta respuesta para más detalles.
KERNEL
La mayoría del tiempo durante el apagado lo toma init
. Para ahorrar tiempo, puedes omitir init
y pedirle al kernel directamente un apagado haciendo la llamada al sistema:
reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_POWER_OFF)
Eso es lo que haría el comando busybox poweroff -f
o la tecla SysRq mágica O
(equivalente a Alt-SysRq-O en una PC) (ref). Ambos deben ir precedidos por sync
para evitar dañar los sistemas de archivos. Desde la línea de comandos podemos hacer:
~# echo 1 >/proc/sys/kernel/sysrq
~# echo s >/proc/sysrq-trigger
~# echo o >/proc/sysrq-trigger
Esta es la forma más rápida de apagar el sistema operativo en un dispositivo rooteado.
REINICIO FORZADO
Pero ¿cómo apagar el dispositivo si incluso el kernel no responde? Normalmente, el hardware puede encargarse de esto, es decir, si mantienes presionado el botón de encendido durante un intervalo de tiempo fijo. Hay algún valor predeterminado (generalmente 10 segundos) en la Unidad de Administración de Energía (PMIC). Ningún proceso se detendrá, no se desmontará ningún sistema de archivos, no se dará ninguna despedida, simplemente se cortará la energía a la CPU, la RAM y otros recursos de hardware relevantes. La mayoría de los SoCs (que tienen PMIC integrado) implementan esto como reinicio, no apagado.
Por lo tanto, para resumir las líneas anteriores, hay dos formas de apagar el dispositivo: a través de init
o llamando directamente al kernel. Ambos se pueden lograr mediante simples comandos de shell o se pueden asignar a alguna tecla de hardware o combinación especial de teclas. Pero el agua puede hacer que cualquier tecla de hardware sea inútil, por lo que este método no puede ser una solución universal.
BOTÓN DE ENERGÍA
Pero el punto es que tu dispositivo no está completamente apagado independientemente del camino que hayas elegido. Durante el proceso de arranque hay cosas que se encienden antes de que se cargue el sistema operativo (y posiblemente incluso cuando no hay un sistema operativo en el dispositivo). Debe haber un circuito en el PMIC (por ejemplo, un microcontrolador en modo de baja potencia y puede que también alguna pila de software) que esté siempre encendido para que pueda escuchar tu solicitud de encender el dispositivo cuando presionas el botón de encendido durante unos segundos, o incluso cuando conectas un cargador al dispositivo en estado de apagado.
PROCESADOR DE COMUNICACIONES
Además, el procesador de banda base (BP) - que ejecuta el módem y es responsable de toda la comunicación a través de las redes móviles como llamadas, SMS e internet - está totalmente aislado del Procesador de Aplicaciones (el que llamamos CPU) y no está gobernado por el kernel de Android; ejecuta un RTOS independiente. Y como dicen, las agencias gubernamentales pueden usarlo para rastrearte incluso cuando crees que tu dispositivo está apagado. Por lo tanto, esto significa que es posible que esté (parcialmente o totalmente o periódicamente) en funcionamiento cuando Android no lo está.
Y si no hay nada más, al menos los terminales de la batería están siempre activos, conectados a alguna parte de la placa base que puede provocar un cortocircuito cuando se mojan. Entonces, si tu dispositivo no es resistente al agua y la batería no tiene alguna protección contra cortocircuitos incorporada, nunca puedes estar seguro de que tu dispositivo no se dañará cuando se derrame agua sobre él.
0 votos
Solo para aclarar, ¿sería aceptable una solución que apague el teléfono de forma normal pero sin requerir entrada táctil? (Esto requeriría acceso root sin embargo). La tecla de encendido se puede configurar para iniciar ese apagado al mantenerla presionada durante X número de segundos. Es mejor si mencionas el dispositivo Android y la versión que estás utilizando.
0 votos
Me gustaría matarlo al instante si es posible. Mantener presionada una tecla durante mucho tiempo suele ser demasiado largo para considerarse "instantáneo"
0 votos
Estás perdiendo el punto. Si el touch no funciona, solo se puede depender del volumen o del botón de encendido. Puedes configurarlos para apagar el teléfono con solo un toque o con una pulsación larga. Si están configurados para un solo toque, perderías la funcionalidad original de esos botones, así que la elección es tuya para hacer el intercambio porque el sistema operativo no puede saber automáticamente (a menos que se construya algún sensor para eso) que el agua ha entrado en el dispositivo.
0 votos
Solo por diversión: configura MacroDroid para ejecutar reboot -p en el sensor de agitación como disparador. si tu teléfono se moja, simplemente golpéalo, se apagará inmediatamente (combinación de todas las sugerencias)