Einzelnen Beitrag anzeigen
  #6  (Permalink
Alt 12.02.2021, 21:53
Benutzerbild von DarkAngel2401
DarkAngel2401 DarkAngel2401 ist offline
Moderator
 
Registriert seit: 25.01.2005
Ort: /root
Beiträge: 799
Bandbreite: genug
Standard AW: devolo 1200+ WiFi ac nach FW-Update defekt

Zitat:
Zitat von robert_s Beitrag anzeigen
Dann sollte der Bootloader eigentlich auch so schlau sein, dass wenn ein Firmware-Slot nicht gebootet werden kann (was die Firmware in diesem nach dem Boot irgendwo im Flash abspeichern sollte), wieder auf den vorigen gewechselt wird. Die Frage ist, ob der Bootloader-Code wirklich so mangelhaft ist, dass dieser Mechanismus komplett fehlt, oder ob Du nur noch nicht herausgefunden hast, welche Tasten Du drücken musst, damit der Bootloader das macht ...
Also dann doch noch nicht ganz btt ...



Der Bootloader besteht aus 2 Stages, die erste initiiert die Hardware, die 2. habe ich in Ghidra teilweise zerlegt (ARMv7). Der jetzt als aktiv markierte Teil lässt sich ja booten - zumindest aus Bootloader-Sicht. Alle CRCs passen, der Kernel (zum falschen Prozessor) lässt sich laden und entpacken, der Absprung in den Kernel-Code klappt und danach ist erst Ende Gelände, da der Code nicht zur Prozessorarchitektur passt bzw. der Code nicht zur Hardware (Ich hab den falschen Kernel zugegebenerweise nicht angeschaut)..

Ein Menü wie bspw. in uboot gibt es nicht, lediglich per beliebigem Key-Input / seriellem Input wird der Bootprozess an einer Stelle unterbrochen (da wartet er 1 Sekunde auf Input) und falls hier der Bootprozess unterbrochen wird, wird auf den download-Modus per seriellem Input gewechselt. Hier ist die anschließende Decodierung der übermittelten Daten allerdings komplexer als gedacht.


Aber: Im Bootprozess wird eines der mtd im NAND eingelesen. Hier enthalten die ersten 404 Bytes alle Informationen zu aktivem Image, diverseste CRCs, Size-Angaben zu beiden Image Kernels und root-FSen, Namen, Timestamps und dann nochmal eine letzte CRC über diese 404 Bytes.
Welches Byte genau das aktive Image angibt und wie die CRCs berechnet werden, war ein wenig tricky, aber genau hier setze ich jetzt an, indem ich das Byte zum aktiven Image abändere und die globale CRC neu berechne. Dann kann ich diese Page wieder ins NAND reinschreiben und das Telefon sollte vom vorigen, funktionierenden Image booten.


Leider gibt es wirklich keine Möglichkeit, das Aktiv-Flag per Tastendruck am Telefon, serieller Konsole oder Jumper auf dem Board zu überschreiben.
__________________
Gruß, DarkAngel2401

Geändert von DarkAngel2401 (12.02.2021 um 21:59 Uhr)
Mit Zitat antworten