Quiero permitir que el sistema operativo Android se inicie automáticamente cuando el cargador está conectado (para HTC Magic) sin presionar el botón de encendido. Encontré esta guía:
Si su teléfono solo recibe uno de esos feos símbolos de batería cuando un cargador está conectado a un teléfono apagado, esto se debe a que /system/bin/chargemon interrumpe el proceso de inicio. Ese archivo es un programa ARM binario, lo reemplacé con un script simple que contiene solo una línea: echo skipping chargemon El archivo fue creado e instalado con los siguientes pasos:
echo "echo skipping chargemon" > chargemon.script
adb pull /system/bin/chargemon chargemon.backup
adb push chargemon.script /sqlite_stmt_journals
adb shell
$ cd /sqlite_stmt_journals
$ su
# mount -o remount,rw /dev/block/mtdblock0 /system
# cat chargemon.script > /system/bin/chargemon
# chmod 755 /system/bin/chargemon
# reboot -p
Cuando se da el comando su arriba, es posible que deba reconocerse en un cuadro de diálogo en la pantalla del teléfono. El comando final reiniciar -p apaga el teléfono. Como el cable USB aún está conectado, se encenderá nuevamente y, si todo ha ido bien, el teléfono completará su proceso de arranque sin detenerse con ningún símbolo de batería.
Pero no puedo encontrar "chargemon" en System/bin
Lo tengo funcionando (arranque automático cuando el cargador está enchufado) en mi HTC Desire 200. No hay playlpm/lpm/idot/chargemon en estos dispositivos HTC. Afortunadamente hay algo similar, /system/bin/zchgd . Este es un servicio que se encarga de la animación de carga. En este dispositivo específico, la animación de carga se reproduce aunque el teléfono esté encendido (en la pantalla de bloqueo), también se reproduce cuando el teléfono está apagado mientras está en un cargador. (Por cierto: las imágenes de la animación se pueden encontrar en /system/media/zchrgd ).
Como descubrí, el servicio zchgd se inicia de manera diferente cuando el teléfono está apagado o encendido. Simplemente revisé los scripts de inicio, en mi caso /init.gtou.rc :
service zchgd_offmode /system/bin/zchgd -pseudooffmode
user root
group root graphics
disabled
service zchgd_onmode /system/bin/zchgd -onmode
user root
group root graphics
on property:dev.zcharge=true
start zchgd_onmode
on property:dev.zcharge=false
stop zchgd_onmode
Entonces, creé un servicio zchgd falso, un script sh simple que reemplaza el servicio original.
Pasos:
adb shell
su
mount -o rw,remount,rw /system
cd /system/bin
ls -l zchgd*
mv zchgd zchgd_original
touch zchgd
vi zchgd # <- insert content
chmod 0755 zchgd
chown root.shell zchgd
ls -l zchgd*
Contenido de mi servicio falso:
#!/system/bin/sh
log -p v -t "zchgdwrapper" "Starting fake zchgd service; args='$@'"
if [ "$#" -eq 1 ]; then
case $1 in
-pseudooffmode)
log -p v -t "zchgdwrapper" "PseudoOffMode service"
while true; do
sleep 60
enabled=$(cat /sys/class/power_supply/battery/charging_enabled)
log -p v -t "zchgdwrapper" "Checking battery charging enabled; enabled='$enabled'"
if [ "$enabled" -gt 0 ]; then
log -p v -t "zchgdwrapper" "Going to magic-reboot"
su -c "echo 1 > /proc/sys/kernel/sysrq"
su -c "echo b > /proc/sysrq-trigger"
ret=$?
log -p v -t "zchgdwrapper" "Magic-reboot issued ret='$ret'"
sleep 120
exit 0
fi
done
;;
-onmode)
log -p v -t "zchgdwrapper" "OnMode service"
while true; do
log -p v -t "zchgdwrapper" "Sleeping beauty"
sleep 3600
done
;;
esac
fi
log -p v -t "zchgdwrapper" "Not gonna happen - starting the original service"
/system/bin/zchgd_original $@
exit $?
Cuando el servicio se inicia con el argumento -pseudooffmode , verifica el estado de la batería periódicamente (cada minuto en mi caso). Si el teléfono se está cargando o la batería está llena, se reiniciará automáticamente. No pude usar /system/bin/reboot , obtuve errores de permiso, aunque los tenía... Así que lo reinicié con un truco, esas dos líneas de eco. El modo -on está ahí solo porque no quiero ver la animación de carga incluso si mi teléfono está encendido.
Puede depurar el script con adb logcat -s zchgdwrapper . ¡Espero que esto haya sido útil!
IMPORTANTE
Para que esto funcione, DEBE habilitar la opción Configuración/Encendido/Arranque rápido . No funcionará si está deshabilitado, creo que sin la opción de inicio rápido se inicia otro firmware, pero no estoy seguro de eso.
También tengo esta configuración en SuperSU # , no creo que sea necesaria, pero aquí está:
Más información: https://github.com/tomicooler/htcdesire200autoboot
Machado
Irfan Latif