Automatischer Start bei angeschlossenem Ladegerät (für HTC Magic)

Ich möchte, dass das Android-Betriebssystem automatisch gestartet wird, wenn das Ladegerät angeschlossen ist (für HTC Magic), ohne den Netzschalter zu drücken. Ich habe diese Anleitung gefunden:


Kompletter Bootvorgang beim Laden

Wenn Ihr Telefon nur eines dieser hässlichen Batteriesymbole erhält, wenn ein Ladegerät an ein ausgeschaltetes Telefon angeschlossen ist, liegt dies daran, dass der Init-Prozess durch /system/bin/chargemon unterbrochen wird. Diese Datei ist ein binäres ARM-Programm, ich habe sie durch ein einfaches Skript ersetzt, das nur eine einzige Zeile enthält: echo skipping chargemon Die Datei wurde mit den folgenden Schritten erstellt und installiert:

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

Wenn der Befehl su oben gegeben wird, muss er möglicherweise in einem Dialog auf dem Telefonbildschirm bestätigt werden. Der letzte Befehl reboot -p fährt das Telefon herunter. Da das USB-Kabel noch angeschlossen ist, schaltet es sich wieder ein, und wenn alles gut gegangen ist, schließt das Telefon seinen Startvorgang ab, ohne mit einem Batteriesymbol anzuhalten.


Aber ich kann "chargemon" nicht in System/bin finden

Hast du vorher eine Lösung gefunden?

Antworten (1)

Ich habe es zum Laufen gebracht - automatischer Start, wenn das Ladegerät angeschlossen ist - auf meinem HTC Desire 200. Auf diesen HTC-Geräten gibt es kein playlpm/lpm/idot/chargemon . Glücklicherweise gibt es etwas Ähnliches, /system/bin/zchgd . Dies ist ein Dienst, der sich um die Ladeanimation kümmert. Auf diesem speziellen Gerät wird die Ladeanimation abgespielt, obwohl das Telefon eingeschaltet ist (auf dem Sperrbildschirm), sie wird auch abgespielt, wenn das Telefon ausgeschaltet wird, während es sich auf einem Ladegerät befindet. (Übrigens: Die Bilder für die Animation finden Sie unter /system/media/zchrgd .)

Wie ich herausgefunden habe, wird der zchgd- Dienst unterschiedlich gestartet, wenn das Telefon aus- oder eingeschaltet wird. Ich gehe einfach durch die Init-Skripte, in meinem Fall /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

Also habe ich einen gefälschten zchgd- Dienst erstellt, ein einfaches sh- Skript, das den ursprünglichen Dienst ersetzt.

Schritte:

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*

Inhalt meines gefälschten Dienstes:

#!/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 $?

Wenn der Dienst mit dem Argument -pseudooffmode gestartet wird , überprüft er regelmäßig den Batteriestatus (in meinem Fall jede Minute). Wenn das Telefon aufgeladen wird oder der Akku voll ist, wird das Telefon automatisch neu gestartet. Ich konnte /system/bin/reboot nicht verwenden , ich bekam Berechtigungsfehler, obwohl ich sie hatte ... Also starte ich es mit einem Hack neu, dass zwei Zeilen echoen. Der -onmode ist nur da, weil ich die Ladeanimation nicht sehen möchte, selbst wenn mein Telefon eingeschaltet ist.

Sie können das Skript mit adb logcat -s zchgdwrapper debuggen . Ich hoffe, das war hilfreich!

WICHTIG

Damit dies funktioniert, MÜSSEN Sie die Option Einstellungen/Energie/Schnellstart aktivieren . Es funktioniert nicht, wenn es deaktiviert ist, ich denke, ohne die Schnellstartoption wird eine andere Firmware gebootet, aber ich bin mir da nicht sicher.

Auch ich habe diese Konfiguration in SuperSU# , ich denke nicht, dass es notwendig ist, aber hier ist es:

  • Standardzugriff < Gewähren
  • Aktivieren Sie su während des Bootens
  • Systembenutzer vertrauen

Weitere Infos: https://github.com/tomicooler/htcdesire200autoboot