Shell völlig verbohrt, Toolbox behauptet "kein solches Tool"

HTC Magic, gerootet mit CyanogenMod 5. Der Versuch, busybox mit dem „Busybox Installer“ aus dem Market zu installieren, endete mit einem seltsam verbohrten System. Android bootet nicht, friert auf dem Begrüßungsbildschirm ein. ADB-Shell funktioniert jedoch. Andererseits funktioniert fast keiner der Befehle.

Die busybox-Datei befindet sich anscheinend in /system/xbin. Wenn ich es jedoch anrufe, bekomme ich "Erlaubnis verweigert". Auch nach sudo.

Das Ausführen allgemeiner Befehle wie ls, cp, ln gibt die gleiche Fehlermeldung: "Berechtigung verweigert". Scheint, als wären dies symbolische Links zu busybox, die gebohrt ist, siehe oben.

/system/bin/toolbox ist da, aber es weigert sich, die meisten nützlichen Befehle mit einer einheitlichen Meldung "No such tool" auszuführen. Ls, cp, mount, chmod, chown - "Kein solches Tool". Experimentell fand ich, dass set, ps, kill, reboot funktioniert. Gibt es eine Liste mit Toolbox-Befehlen?

Die einzige relevante Meldung in Logcat ist "02-02 01:36:38.280: E/logwrapper(61): running /system/xbin/busybox failed: Permission denied". Ich wusste das irgendwie.

Ich kann auf die SD-Karte schreiben. Gibt es eine Möglichkeit, die busybox neu zu flashen und gleichzeitig ausführbar zu machen?

Gibt es irgendwo auf /data eine ausführbare Datei, so dass ich eine Kopie von busybox dorthin schieben könnte?

Ich kann im Wiederherstellungsmodus neu starten, der der Wiederherstellungsmodus von Android ist.

Irgendwelche Ideen, wie man das System wieder in einen benutzbaren Zustand bringt? Das Telefon ist ein Kratztelefon, daher ist Datenverlust kein Problem - es gibt dort keine guten Daten.

Es scheint, als würde es irgendwie alles zurückbringen, wenn man busybox ausführbar macht. Ich bin jedoch völlig verloren, wie man das macht. Und ich bin ziemlich überrascht, dass die Toolbox chmod nicht unterstützt.

EDIT: lustiger Datenpunkt. Wenn ich in die Wiederherstellung boote, kann ich immer noch ADB-Shell ausführen. Und ich bekomme eine völlig andere Umgebung - es gibt eine Befehlszeile mit ls, busybox (!) und so weiter. /system ist fast leer. Kann ich von dieser Umgebung irgendwie zum regulären /system zurückkehren? Der Mount-Befehl ist verfügbar.

Wenn Sie eine benutzerdefinierte Wiederherstellung flashen können, verfügt sie möglicherweise über die Option „Berechtigungen korrigieren“. CWM tut es.
Auf Anhieb könnten Sie versuchen, eine Busybox-Binärdatei nach zu schieben /data/localund sie dann mit chmodder zu verwenden, die sich in befindet /system/xbin.
@eldarerathis: Wenn ich busybox nach /data/local drücke, wird es nicht ausführbar. Und ich habe kein chmod zur Verfügung.
Oh richtig, es hat keine ausführbaren Berechtigungen, nachdem es gepusht wurde. Eine benutzerdefinierte Wiederherstellung könnte dann eine gute Wahl sein, wie @MatthewRead erwähnte.
@eldarerathis Das tut es, aber RM erfordert ein gebootetes Gerät;). Seva, kannst du suwährend der Genesung adb-ing? Das könnte alles sichtbar machen. Auf meinem Vibrant ist die "Umgebung" während der Genesung genau die gleiche wie normal, also würde ich hoffen, dass es auch für Sie nicht anders ist.
Gemäß Ihrer letzten Bearbeitung: Sie sollten in der Lage sein, die Partition des Geräts aus der Wiederherstellung bereitzustellen /system. mount /systeman sich funktioniert für mich, aber ich weiß nicht, ob das je nach Gerät / Wiederherstellung / etc. variiert. Dies ist auf einem HTC EVO.
@eldarerathis: Das habe ich herausgefunden. Komisch, sieht so aus, als wäre die Wiederherstellung eine Ersatz-Linux-Instanz.

Antworten (1)

Yay, das Telefon bootet wieder.

Hier ist das magische Rezept.

Boot into recovery.
adb shell
mkdir /data/s
mount -o rw -t yaffs2 /dev/block/mtdblock3 /data/s
chmod 755 /data/s/xbin/busybox
Reboot the phone.

Meine Hülle ist zurück. Es gibt jetzt eine seltsame Eigenart - ls (von der busybox, nimmt man an) denkt, dass ADB ein ANSI-Terminal ist und versucht, ANSI-Escape-Sequenzen auszugeben. Trotzdem, ja.

Das war meine Vermutung - dass die Berechtigungen nicht so eingestellt waren, dass busybox tatsächlich vom normalen Benutzer ausgeführt werden konnte.