Arranque automático cuando el cargador está conectado (para HTC Magic)

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:


Arranque completo al cargar

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

¿Encontraste alguna solución antes de esto?

Respuestas (1)

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á:

  • Acceso predeterminado < Otorgar
  • Habilitar su durante el arranque
  • Usuario del sistema de confianza

Más información: https://github.com/tomicooler/htcdesire200autoboot