[HowTo] FRITZ!Box Firmware-Images (auch unsignierte) über den Bootloader installieren

Modifizierte Firmware, sowie Erweiterungen wie z.B. Telnet, ftp oder SSH einbauen. Das Forum für echte Linux-Tüftler und solche, die es werden wollen.
Antworten
Nachricht
Autor
Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

[HowTo] FRITZ!Box Firmware-Images (auch unsignierte) über den Bootloader installieren

#1 Beitrag von qwertz-asdfgh » 1. Dez 2018 01:59

HINWEIS: Anwendung dieser Anleitung prinzipiell auf eigenes Risiko, ich übernehme keine Haftung!



Vorwort

In diesem Thema möchte ich eine Anleitung zur Verfügung stellen, wo beschrieben ist, wie man Firmware-Images bei FritzBoxen über den Bootloader mit Hilfe der Scripte von @PeterPawn installiert. Das ist insbesondere dann von Interesse wenn man ein unsigniertes Image installieren möchte (seit FRITZ!OS 6.5x können nur noch signierte Images über das WebIf installiert werden) oder falls man ein Downgrade durchführen möchte ohne die Einstellungen zu verlieren.

Unsignierte Images können z.B. mit Freetz erstellte Images sein. Auch wenn das Freetz-Image signiert wurde so ist zumindest bei der ersten Installation von einer offiziellen FRITZ!OS Version aus (wo man ggf. auch keinen Konsolenzugriff hat) diese z.B. über den Bootloader zu installieren da diese den entsprechenden Key noch nicht kennt. Auch wenn man eine sog. "Inhaus-Version" installieren möchte ist dies bei der ersten Installation einer solchen (seit den Inhaus-Versionen 7.08) eine Möglichkeit in die "Inhaus-Reihe" einzusteigen da die Inhaus-Versionen seit Ver. 7.08 einen eigenen Key verwenden.

Die Recovery-Tools von AVM verwenden übrigens die gleichen Methoden für die Installation der Firmware, wobei das Recovery-Tool von AVM zusätzlich auch noch ein neues TFFS-Image erstellt und dieses in die TFFS-Partition(en) der FRITZ!Box hochlädt (das setzt die Box dann auf Werkseinstellungen zurück). Wenn man dagegen nur die Firmware wie hier beschrieben hochlädt bleiben die Einstellungen der FRITZ!Box erhalten (auch bei einem Downgrade über diese Methode).

Die Idee zu dieser Anleitung ist aus folgendem Thema von @gismotro hervorgegangen:
[HowTo] Wie flashe ich eine Fritzbox 75xx (mit signierter FW ab Version 6.5x)

Diese Anleitung richtete sich aber 1. nur an FRITZ!Box-Modelle mit NAND-Flash und 2. finde ich, dass eine solche Anleitung nicht in den Freetz-Bereich passt denn die Installationsmethode über den Bootloader ist nicht nur für die Installation von Freetz-Images geeignet (s.h. Beispiele oben). Zudem kann man nun auch mit einem PowerShell-Script von @PeterPawn unter Windows Firmware-Images automatisiert für das Hochladen über den Bootloader vorbereiten, eine *nix-Umgebung ist also nicht mehr zwingend erforderlich. Des Weiteren haben insb. auch die neuen Inhaus-Versionen von AVM (welche einen neuen Key für die Signatur verwenden) den Auschlag dazu gegeben diese Anleitung hier zu verfassen. ;)

Außerdem soll hier auch das Hochladen von Firmware-Images für FRITZ!Box-Modelle beschrieben werden wo man diese noch direkt über den Bootloader in den NOR- oder eMMC-Speicher schreiben kann (z.B. FRITZ!Box 4020, 4040, 6360, 6490, 6590, 7390 und viele ältere Modelle). Bei diesen Modellen genügt es (zumindest bei den NOR-Flash Modellen) die "kernel.image" aus dem Firmware-Image (TAR-Archiv) über den Bootloader z.B. per eva_store_tffs oder auch manuell per FTP-Client in den Flash-Speicher zu schreiben. Neben den neueren Scripten von @PeterPawn gibt es dafür auch einige ältere Scripte wie z.B. "push_firmware" (in Freetz enthalten) auf die ich hier nicht näher eingehe (dafür gibt es schon Anleitungen, auch für die manuelle Variante per FTP-Client).

Bei den NAND-Flash Modellen (z.B. FRITZ!Box 3370, 3390, 3490, 7362 SL, 7412, 7430, 7490, 7560, 7580 usw.) wird dagegen die Firmware über den Bootloader nicht direkt in den Flash-Speicher geschrieben sondern nur in den Arbeitsspeicher hochgeladen, von dort startet dann die Firmware und installiert sich anschließend selbst in den Flashspeicher. Bei diesen Modellen muss man das Firmware-Image entspr. vorbereiten (z.B. mit dem Script "image2ram") bevor man es über den Bootloader z.B. per eva_to_memory in den RAM hochladen kann. Wenn man mit Freetz ein Firmware-Image erstellt kann man sich diesen Schritt (vorbereiten des Firmware-Image) sparen und sich von Freetz gleich das passende "image.in-memory" mit erstellen lassen.



Quellen bzw. mein Dank geht insbesondere an:

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Inhaltsverzeichnis

#2 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:00

  1. Beitrag #1: Vorwort
  2. Beitrag #2: Inhaltsverzeichnis
  3. Beitrag #3: Hinweise und Voraussetzungen für PowerShell unter Windows
  4. Beitrag #4: Hinweise und Voraussetzungen für die YourFritz Shell-Scripte unter *nix
  5. Beitrag #5: Bootloader (EVA) per FTP erreichen
  6. Beitrag #6: Modellübersicht (ab UR8) für die zu verwendende Flash-Methode
  7. Beitrag #7: PowerShell für Windows - Flash-Methode für Modelle mit NOR- oder eMMC-Speicher
  8. Beitrag #8: PowerShell für Windows - Flash-Methode für Modelle mit NAND-Speicher
  9. Beitrag #9: Shell-Script für *nix - Flash-Methode für Modelle mit NOR- oder eMMC-Speicher
  10. Beitrag #10: Shell-Script für *nix - Flash-Methode für Modelle mit NAND-Speicher
  11. Beitrag #11: Alternative Methoden (nur Erwähnung, keine Beschreibung)
  12. Beitrag #12: Hinweis für Ergänzungs- und Korrekturvorschläge
  13. Beitrag #13: To-Do/Changelog

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Hinweise und Voraussetzungen für PowerShell unter Windows

#3 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:01

Allgemeine Hinweise
  1. Bei den CLI-Befehlen ist die Groß-/Kleinschreibung zu beachten.
  2. Man sollte kein (blutiger) Anfänger bzgl. der Kommandozeile sein.


Hinweise und Voraussetzungen bei Verwendung der PowerShell unter Windows

Wer mit Windows und der dort in neueren Windows-Versionen verfügbaren (aktuellen) PowerShell arbeitet sind die PowerShell-Scripte "EVA-Discover.ps1", "EVA-FTP-Client.ps1" (>klick1<) und "FirmwareImage.ps1" (>klick2<) aus dem YourFritz GitHub-Repository von PeterPawn (>klick<) zu empfehlen, unter Windows erleichtern diese die Arbeit durchaus enorm und kann somit diese Variante (unter Windows) als bevorzugten Weg empfehlen. Ich selbst habe das mit Windows 10 Pro x64 Ver. 1803 und der PowerShell-Ver. 5.1.17134.228 getestet.

Es ist der Einsatz der PowerShell ab Ver. 5.x (in Windows 10 bereits enthalten, bei älteren Windows-Versionen ggf. aktualisieren, unter Windows 7 ggf. das "Windows Management Framework 5.1" nachinstallieren) oder alternativ von PowerShell Core Ver. 6.x zu empfehlen (letzteres kann auch unter MacOS X oder Linux genutzt werden).

Zum herunterladen der PowerShell-Scripte hat @PeterPawn im IPPF noch einen guten Hinweis gegeben:
https://www.ip-phone-forum.de/posts/2306398/ hat geschrieben:Nachtrag:
Um das noch einmal zu klären, weil immer wieder Leute einfach die HTML-Seite von GitHub bei sich speichern und das dann als PowerShell-Skript aufrufen wollen ... die Links zu GitHub führen zur "Ansicht" der Datei und wer diese - so wie sie wirklich ist - auf seinem PC speichern möchte, der muß schon den dort als "Raw" gekennzeichneten Link für das Speichern verwenden. Dazu einfach das Kontextmenü für den "Raw"-Button aufrufen und mit "Save link as ..." (oder wie auch immer das im verwendeten Browser heißen mag) dann die (rohe) Datei im korrekten Format speichern.

Hinweise/Voraussetzungen:
  • Ich gehe in dieser Anleitung davon aus, dass die PowerShell-Scripte in den Ordnern "C:\YourFritz\master\eva_tools\" (EVA-Discover.ps1 und EVA-FTP-Client.ps1) und "C:\YourFritz\master\signimage\" (FirmwareImage.ps1) abgelegt sind. Natürlich kann man diese auch an einer anderen (geeigneten) Stelle abspeichern (die Befehle sind dann entspr. anzupassen), das ist nur als Beispiel gedacht.
  • Standardmäßig können (unsignierte) PowerShell-Scripte unter Windows nicht ausgeführt werden da die voreingestellte Ausführungsrichtlinie (Execution_Policies) dies i.d.R. verhindert (Standard Ausführungsrichtlinie bei vielen, nicht allen, Windows-Versionen: RESTRICTED):
    http://go.microsoft.com/fwlink/?LinkID=135170
    • Die aktuell eingestellte Ausführungsrichtlinie kann also z.B. durch Eingabe des folgenden Kommandos in der PowerShell überprüft werden:

      Code: Alles auswählen

      Get-ExecutionPolicy
      Das sieht dann z.B. so aus:
      PowerShell hat geschrieben:PS C:\> Get-ExecutionPolicy
      Restricted
    • Vor dem Einsatz (unsignierter) PowerShell-Scripte muss als ggf. die Sicherheitsbeschränkung (temporär) aufgehoben werden:
      https://docs.microsoft.com/de-DE/powers ... tionpolicy
      Also z.B. die Ausführungsrichtlinie "UNRESTRICTED" (temporär) für den aktuellen Benutzer (die Power-Shell muss somit auch nicht "Als Administrator" ausgeführt werden) einstellen:

      Code: Alles auswählen

      Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
      Ergebnis:
      PowerShell hat geschrieben:PS C:\> Get-ExecutionPolicy
      Restricted
      PS C:\> Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

      Ausführungsrichtlinie ändern
      Die Ausführungsrichtlinie trägt zum Schutz vor nicht vertrauenswürdigen Skripts bei. Wenn Sie die
      Ausführungsrichtlinie ändern, sind Sie möglicherweise den im Hilfethema "about_Execution_Policies"
      unter "http://go.microsoft.com/fwlink/?LinkID=135170" beschriebenen Sicherheitsrisiken ausgesetzt.
      Möchten Sie die Ausführungsrichtlinie ändern?
      [J] Ja [A] Ja, alle [N] Nein [K] Nein, keine [H] Anhalten [?] Hilfe (Standard ist "N"): j
      PS C:\> Get-ExecutionPolicy
      Unrestricted
      PS C:\> Get-ExecutionPolicy -List

      Scope ExecutionPolicy
      ----- ---------------
      MachinePolicy Undefined
      UserPolicy Undefined
      Process Undefined
      CurrentUser Unrestricted
      LocalMachine Undefined

      PS C:\>
  • Für den, der nicht regelmäßig mit PowerShell-Scripten arbeitet, empfehle ich eindringlich anschließend wieder die ursprüngliche Ausführungsrichtlinien (z.B. Ausführungsrichtlinie = RESTRICTED) wiederherzustellen!

    Code: Alles auswählen

    Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Restricted

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Hinweise und Voraussetzungen für die YourFritz Shell-Scripte unter *nix

#4 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:02

Allgemeine Hinweise
  1. Bei den CLI-Befehlen ist die Groß-/Kleinschreibung zu beachten.
  2. Man sollte kein (blutiger) Anfänger bzgl. der Kommandozeile sein.


Hinweise und Voraussetzungen bei Verwendung der Shell-Scripte aus dem YourFritz-Repository

Wenn man bereits eine Linux-Distribution als Betriebssystem verwendet (das dürfte bereits der Fall sein wenn man sich ein Freetz-Image baut, z.B. auch in einer VM mit z.B. "Freetz-Linux") empfiehlt sich der Einsatz der Shell-Scripte aus dem YourFritz-Repository von @PeterPawn. Wer die Freetz-Buildumgebung bereits auf dem Rechner/in der VM hat braucht auch das YourFritz-Repository nicht noch einmal separat herunterzuladen da sich dieses mit den entsprechenden Scripten bereits im Ordner "./[freetz-directory]/tools/yf/eva_tools" befindet (bei neueren Versionen des Freetz-Trunk).

Wer selbst kein Freetz-Image baut (weil man z.B. ein anderes Firmware-Image installieren möchte welches nicht mittels Freetz erstellt wurde oder unbedingt ein Freetz-Image aus fremden Quellen verwenden möchte), keine Linux-Distribution auf dem Rechner oder in einer VM einsetzt sondern ein aktuelles Windows (ab Ver. 7) mit PowerShell verwendet sollte auf die PowerShell-Scripte zurückgreifen.



Als erstes lädt man das aktuelle YourFritz (man beachte auch Paketabhängigkeiten, neben git z.B. auch socat und netcat in der OpenBSD-Variante) von @PeterPawn herunter:

Code: Alles auswählen

git clone https://github.com/PeterPawn/YourFritz.git yourfritz-master
Das Ziel "yourfritz-master" ist hier nur als Beispiel gedacht. "git checkout binaries" bzw. "git submodule update ..." sparen wir uns hier da die vorkompilierten Binaries u.a. für image2ram, eva_discover und/oder eva_to_memory nicht benötigt werden.

Wer (wie oben bereits erwähnt) Freetz genutzt hat um ein Image zu erstellen kann sich diesen Schritt sparen, die YourFritz-Scripte befinden sich dann bereits im Freetz-Ordner (s.o.).



Bash/Dash

Wer eine Linux-Distribution einsetzt die Dash als Standard-Shell verwendet anstatt Bash (Debian basierte) kann z.B. entweder mit

Code: Alles auswählen

sudo dpkg-reconfigure dash
die Standard-Shell (vorübergehend) auf Bash abändern oder mit

Code: Alles auswählen

cd yourfritz-master   #Befehl entsprechend dem verwendeten Ordner wo sich die lokale Kopie des YourFritz-Repository befindet anpassen
find . -type f -executable -exec sed -e "1s|/bin/sh|/bin/bash|" -i '{}' \;
die Shebangs in allen ausführbaren Scripten der lokalen YourFritz-Kopie von #!/bin/sh auf #!/bin/bash abändern.

Auch hier gilt: Wer Freetz nutzt und auch auf die dortige YourFritz-Kopie zurückgreift welche bei Freetz mitgeliefert wird kann sich diesen Schritt sparen, dort wurden die Shebangs bereits entsprechend geändert.

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Bootloader (EVA) per FTP erreichen

#5 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:07

Um die Firmware per Bootloader auf die Box hochzuladen muss die Box erst einmal im Bootloader angehalten werden. Der Bootloader ist nur kurz nach dem Einschalten der FRITZ!Box erreichbar und muss in diesem Zeitraum "angehalten" werden. Der Bootloader ist unabhängig von der derzeit installierten FRITZ!OS-Version, falls also (warum auch immer) die FRITZ!Box in einer Bootschleife hängt (also nicht mehr korrekt startet) so steht weiterhin der Bootloader zur Verfügung über den die Box evtl. wieder "gerettet" werden kann. Es ist also wichtig, dass man sich mit der bzw. einer Methode vertraut macht wie man auf den Bootloader (z.B. per FTP-Client) zugreifen kann.



Vorbereitung

Prinzipiell gibt es mehrere Möglichkeiten den Bootloader zu erreichen. Man verbindet als allererstes einen LAN-Port der FRITZ!Box per Patch-Kabel mit dem LAN-Port des verwendeten PC/Notebook. Da der Bootloader und somit auch die LAN-Ports der FRITZ!Box nur kurz (ca. für 5s) nach dem Einschalten der FRITZ!Box aktiviert sind, kann es passieren, dass der PC/Notebook z.B. aufgrund des MediaSensing oder "Trägheit" des LAN-Ports des PC/Notebook nicht rechtzeitig Kenntnis davon nimmt, dass der LAN-Port der FRITZ!Box eingeschaltet ist. In solchen Fällen hilft z.B. der Einsatz eines einfachen Ethernet-Switches den man zwischen PC/Notebook und FRITZ!Box anschließt (also PC/Notebook <Patchkabel> Switch <Patchkabel> FRITZ!Box).

Zu beachten ist außerdem, dass der Bootloader i.d.R. auf die IP-Adresse 192.168.178.1 hört und zwar unabhängig davon, welche IPv4-Einstellungen man bei der Konfiguration im WebIf der FRITZ!Box eingestellt hat! Der Bootloader hat dbzgl. seine eigene (Vor)-Einstellung welche nicht über das WebIf der FRITZ!Box bzgl. IPv4-Einstellungen geändert werden kann!
Die IPv4-Einstellung/Adresse des Bootloader ist in der Variable "my_ipaddress" abgelegt, diese kann also z.B. auch über die Support-Daten ausgelesen werden (falls diese Einstellung z.B. mal geändert wurde, m.W.n. macht das z.B. das ruKernelTool gerne, warum auch immer).
Ich gehe davon aus, dass der Bootloader auf die IP-Adresse 192.168.178.1 reagiert. Ist dieser (siehe Support-Daten) evtl. auf eine andere IP-Adresse eingestellt sind die IP-Einstellungen und Kommandozeilen Befehle entsprechend anzupassen.

Es bietet sich also an oder ist je nach verwendeter Methode erforderlich, die IPv4-Einstellungen der verwendeten LAN-Schnittstelle des PC/Notebook (manuell, kein DHCP) entsprechend dem Bootloader einzustellen. Wenn also der Bootloader über 192.168.178.1 erreichbar ist dann bekommt der PC/Laptop eine:
  • IPv4-Adresse zwischen 192.168.178.2-254,
  • als Subnetzmaske bietet sich 255.255.255.0 an und
  • als Gateway kann 192.168.178.1 eingetragen werden (darauf kann auch verzichtet werden wenn man z.B. in den erweiterten Einstellungen dieses Subnetz zusätzlich anlegt).
Ein DNS-Server muss nicht angegeben werden bei den IPv4-Einstellungen.

Eine aktive (Personal)-Firewall sollte den Zugriff erlauben bzw. bei Problemen ersatzweise (vorübergehend) deaktiviert oder gar deinstalliert werden.



1. Methode (die manuelle Variante, unabhängig vom Betriebssystem)

Prinzipiell funktioniert das mit jedem Betriebssystem (Windows, MacOS, Linux-Distribution usw.) welches einen Kommandozeilen FTP-Client mitbringt.
  1. Man starte ein Kommandozeilen-Terminal (z.B. "Eingabeaufforderung" bei Windows).
  2. Man gebe in die Kommandozeile folgenden Befehl ein aber drückt noch nicht ENTER:

    Code: Alles auswählen

    ftp 192.168.178.1

  3. Nun verbindet man die FRITZ!Box mit dem Stecker-Netzteil, nach ca. 2-4s ist der Bootloader erreichbar (man erkennt es daran, dass die Ethernet-Verbindung aktiv ist). Nun hat man (bis zu) 5s Zeit den schon eingegebenen Befehl auszuführen (Enter drücken).
  4. In Verbindung mit dem richtigen Timing sieht das ganze so aus:

    Code: Alles auswählen

    Verbindung mit 192.168.178.1 wurde hergestellt.
    220 ADAM2 FTP Server ready
    530 not logged in
    Benutzer (192.168.178.1:(none)): 
    Steht dort nicht "ADAM2 FTP Server ready" dann hat man nicht den Bootloader der FRITZ!Box erreicht sondern (irgendeinen) anderen FTP-Server, dann braucht man also nicht weiter fortzufahren!
  5. Mit der Zeile "Benutzer (192.168.178.1:(none)):" fragt der Bootloader nach dem Benutzername, der lautet "adam2" (ohne Anführungszeichen), das ist auch gleich das Passwort was im nächsten Schritt abgefragt wird.
  6. Ist Benutzername und Passwort eingegeben (und wurden akzeptiert) sieht das nun so aus:

    Code: Alles auswählen

    Verbindung mit 192.168.178.1 wurde hergestellt.
    220 ADAM2 FTP Server ready
    530 not logged in
    Benutzer (192.168.178.1:(none)): adam2
    331 Password required for adam2
    Kennwort:
    230 User adam2 successfully logged in
    ftp> 
    Nun ist man also mit dem Bootloader verbunden und kann entsprechende Aktionen durchführen. Mit dem Befehl "bye" (ohne Anführungszeichen) kann die Verbindung beendet werden ohne die FRITZ!Box zu rebooten, der Bootloader steht also weiterhin zur Verfügung. Neustart dann indem man die Stromversorgung der FRITZ!Box kurz trennt oder man führt den Reboot durch indem man vor dem beenden der FTP-Verbindung mit "bye" den Befehl "quote REBOOT" (ohne Anführungszeichen) ausführt.


2. Methode (für *nix und MacOS X Systeme, mit Shell-Script)

Eine weitere Methode ist der Einsatz des Tools "eva_discover" aus dem YourFritz-Repository von PeterPawn:
https://github.com/PeterPawn/YourFritz/ ... a_discover

Das bietet sich z.B. unter Linux-Systemen an wenn man Probleme mit dem richtigen Timing hat und die 3. Methode mangels Windows nicht verwenden möchte.



3. Methode (für Windows-Systeme, mit AVM Wiederherstellungstool)

Das bietet sich an wenn man bei der 1. Methode Probleme mit dem richtigen Timing hat.

Das Wiederherstellungstool von AVM (aka Recovery) bedient sich der gleichen Methode, es spricht den Bootloader (EVA) der FRITZ!Box kurz nach dem einschalten (Stromzufuhr) der FRITZ!Box an, daher ist auch das Wiederherstellungstool von AVM unabhängig davon wie die aktuelle Konfiguration einer FRITZ!Box aussieht oder welche Firmware-Version darauf installiert ist.

Das kann man sich zunutze machen, das Wiederherstellungstool von AVM überprüft vor dem übertragen der Firmware ob das verwendete Wiederherstellungstool überhaupt zur angeschlossenen FRITZ!Box passt, dazu muss es sich aber mit dem Bootloader verbinden um das zu überprüfen. Man verwendet also das AVM Recovery-Tool von einem anderen FRITZ!Box-Modell, hat man z.B. eine 7590 könnte man z.B. das Recovery-Tool einer FRITZ!Box 7490 verwenden. Es gibt dann zwar eine Fehlermeldung aus, dass das Wiederherstellungstool nicht zur angeschlossenen FRITZ!Box passt, aber das Tool hat den Bootloader der FRITZ!Box dennoch erst einmal angehalten und somit hat man nun alle Zeit der Welt z.B. mit einem FTP-Client auf den Bootloader der FRITZ!Box zuzugreifen.



4. Methode (für Windows-Systeme, mit PowerShell-Script)

Diese Methode bietet sich ebenfalls unter Windows an wenn man bei der 1. Methode Probleme mit dem richtigen Timing hat und/oder die PowerShell verwendet.
Wie schon in Beitrag #3 (Hinweise und Voraussetzungen für PowerShell unter Windows) erwähnt gehe ich in diesem Beispiel davon aus, dass sich das PowerShell-Script "EVA-Discover.ps1" von PeterPawn unter "C:\YourFritz\master\eva_tools\" befindet.
  1. Man startet die PowerShell (Voraussetzungen s.h. Beitrag #3)
  2. Mit folgendem Kommando wechseln wir in den Ordner mit dem PowerShell-Script:

    Code: Alles auswählen

    cd c:\YourFritz\master\eva_tools\
    Ergebnis:

    Code: Alles auswählen

    Windows PowerShell
    Copyright (C) 2016 Microsoft Corporation. Alle Rechte vorbehalten.
    
    PS C:\Users\MaxMuster> cd c:\YourFritz\master\eva_tools\
    PS C:\YourFritz\master\eva_tools>
  3. Nun beginnt man zum Beispiel mit folgendem Befehl die Suche nach dem Bootloader der FRITZ!Box:

    Code: Alles auswählen

    .\EVA-Discover.ps1 -maxWait 120 -Debug -Verbose
  4. Innerhalb der eingestellten Wartezeit (120s / 2 Minuten) verbindet man nun die FRITZ!Box mit dem Stecker-Netzteil, nach einer Weile sollte die Box gefunden werden:

    Code: Alles auswählen

    PS C:\YourFritz\master\eva_tools> .\EVA-Discover.ps1 -maxWait 120 -Debug -Verbose
    AUSFÜHRLICH: Sending discovery packet (1) ...
    AUSFÜHRLICH: Sending discovery packet (2) ...
    AUSFÜHRLICH: Sending discovery packet (3) ...
    AUSFÜHRLICH: Sending discovery packet (4) ...
    AUSFÜHRLICH: Sending discovery packet (5) ...
    AUSFÜHRLICH: Sending discovery packet (6) ...
    AUSFÜHRLICH: Sending discovery packet (7) ...
    AUSFÜHRLICH: Sending discovery packet (8) ...
    AUSFÜHRLICH: Sending discovery packet (9) ...
    AUSFÜHRLICH: Sending discovery packet (10) ...
    AUSFÜHRLICH: Sending discovery packet (11) ...
    AUSFÜHRLICH: Sending discovery packet (12) ...
    DEBUG: Received UDP packet from 192.168.178.1:5035 ...
    AUSFÜHRLICH: Trying to connect to the FTP port to hold up the device in bootloader ...
    DEBUG: Error during FTP connection attempt ...
    EVA_IP=192.168.178.1
    True
    PS C:\YourFritz\master\eva_tools> 
  5. Nun ist der Bootloader der FRITZ!Box angehalten und hat somit alle Zeit der Welt z.B. mit einem FTP-Client oder auch mit dem PowerShell-Script "EVA-FTP-Client.ps1" auf den Bootloader der FRITZ!Box zuzugreifen.



Vorteil der 2., 3. und 4. Methode ist, dass man kein Timing berücksichtigen muss, sowohl das Script eva_discover, das Wiederherstellungstool von AVM als auch das PowerShell-Script EVA-Discover.ps1 "suchen" permanent nach dem Bootloader bis sie ihn erreichen können.

Nach Anwendung der 2., 3. oder 4. Methode (oder nachdem man die Verbindung zum Bootloader per "bye" verlassen hat ohne vorheriges "quote REBOOT") kann man z.B. mit einem FTP-Client, so wie in Methode 1 gezeigt, auf den Bootloader zugreifen (also z.B. per "ftp 192.168.178.1", Benutzername und Passwort s.h. Methode 1), nur, dass man nun keinen "Zeitdruck" mehr dabei hat oder ein Timing berücksichtigen muss (man kann also bei Pkt. 2 der 1. Methode gleich Enter drücken und Pkt. 3 überspringen).

BTW:
Ich persönlich bevorzuge übrigens nc anstatt ftp (unter Linux), damit entfällt dann das "quote" vor jedem Befehl. Für Windows-Nutzer empfehle ich die Variante mit dem PowerShell-Script von PeterPawn.



Die verschiedenen Methoden den Bootloader zu erreichen und noch mehr Hintergründe dazu sind auch sehr umfangreich in der Anleitung BOOTSELECTION.ger von PeterPawn beschrieben:
https://github.com/PeterPawn/modfs/blob ... ECTION.ger

oder im IPPF:
Wie "recovere" ich eigentlich richtig? (bzw. "Wie erreiche ich den Bootloader einer FRITZ!Box wirklich zuverlässig per FTP?")

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Modellübersicht (ab UR8-Reihe) für die zu verwendende Flash-Methode

#6 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:11

NOR-Flash Modelle:

FRITZ!Box:
  • 3270v2/3 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 4020
  • 4040 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 6320 (DualBoot!)
  • 6340 (DualBoot!)
  • 6360 (DualBoot!) (Kernel- und Firmware-Partition in EVA: mtd1 für das aktive Partitionsset, mtd? für das inaktive Partitionsset)
  • 7240 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7270v1/2/3 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7312 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7320 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7330 (SL) (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7340 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7360v1/2 (SL) (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7390 (Kernel- und Firmware-Partition in EVA: mtd1)
  • 7570 vDSL
FRITZ!WLAN Repeater:
  • 300E (Kernel- und Firmware-Partition in EVA: mtd1)
  • 450E (Kernel- und Firmware-Partition in EVA: mtd1)
  • 1750E (Kernel- und Firmware-Partition in EVA: mtd1)
  • DVB-C (Kernel- und Firmware-Partition in EVA: mtd1)


eMMC-Flash Modelle (DualBoot, Puma 6):

FRITZ!Box:
  • 6430
  • 6490
  • 6590


NAND-Flash-Modelle (DualBoot):

FRITZ!Box:
  • 3272
  • 3370
  • 3390
  • 3490
  • 5490
  • 5491 (unbekannt ob die hier beschriebene Flashmethode funktioniert!)
  • 6820 LTE (unbekannt ob die hier beschriebene Flashmethode funktioniert!)
  • 6840 LTE
  • 6890 LTE
  • 7272
  • 7362 SL
  • 7369 (unbekannt ob die hier beschriebene Flashmethode funktioniert!)
  • 7412
  • 7430
  • 7490
  • 7520 (IPQ4019 basiert, funktioniert nur mit zusätzlichem Parameter!)
  • 7530 (IPQ4019 basiert, funktioniert nur mit zusätzlichem Parameter!)
  • 7560
  • 7580
  • 7581 (unbekannt ob die hier beschriebene Flashmethode funktioniert!)
  • 7582 (unbekannt ob die hier beschriebene Flashmethode funktioniert!)
  • 7583 (unbekannt ob die hier beschriebene Flashmethode funktioniert!)
  • 7590
FRITZ!WLAN Repeater:
  • 1200 (IPQ4019 basiert, unbekannt ob die hier beschriebene Flashmethode funktioniert!)
  • 3000 (IPQ4019 basiert, funktioniert nur mit zusätzlichem Parameter!)

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

PowerShell für Windows - Flash-Methode für Modelle mit NOR- oder eMMC-Speicher

#7 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:12

Firmware-Image vorbereiten, NOR-Flash Modelle

Zuerst muss die "kernel.image" aus dem jeweiligen Firmware-Image entpackt werden denn nur diese Datei wird anschließend über den Bootloader in den Flash-Speicher geschrieben. Die Datei "firmware.image" hat bei den NOR-Flash Modellen (zumindest seit Kernel-Ver. 2.6) keine Bedeutung mehr da nur eine Partition im Flash-Speicher für das Firmware-Image verwendet wird (im "kernel.image" ist also auch das filesystem mit enthalten und nicht nur der Kernel).

Das Firmware-Image ist ein TAR-Archiv, man kann also die darin enthaltene Datei "kernel.image" z.B. mit 7-Zip oder tar entpacken:

Code: Alles auswählen

tar -xf c:\YourFritz\Images\firmware.image -O .\var\tmp\kernel.image > c:\YourFritz\Images\kernel.image
Beim testen mit tar unter Windows PowerShell hatte ich jedoch keinen Erfolg das Firmware-Images zu entpacken, daher besser auf einen anderes Tool (z.B. 7-Zip) zum entpacken zurückgreifen.

Alternativ kann man auf das PowerShell-Script "FirmwareImage.ps1" zurückgreifen um die benötigte kernel.image zu extrahieren (im Beispiel davon ausgehend, dass sich die Ausgangsfirmware als "firmware.image" im Ordner "C:/YourFritz/Images/" befindet):

Code: Alles auswählen

. c:\YourFritz\master\signimage\FirmwareImage.ps1
[FirmwareImage]::new("c:\YourFritz\Images\firmware.image").extractMemberAndRemoveChecksum("./var/tmp/kernel.image", "c:\YourFritz\Images\kernel.image")
Man beachte auch den Punkt und das Leerzeichen vor dem ersten Befehl.



Firmware-Image vorbereiten, eMMC-Flash Modelle (Cable-Modelle auf Basis Puma 6)

Prinzipiell ist das vorgehen hier ähnlich wie bei den NOR-Flash Modellen aber im Gegesatz dazu ist bei den Puma 6 Modellen (FRITZ!Box 6430, 6490 und 6590) nicht nur Kernel- und Filesytem wieder getrennt sondern es gibt auch noch 2 verschiedene Prozessoren (ARM und x86 Core) mit jeweils eigener Firmware. Also sind insgesamt 4 Images hochzuladen die man vorher (z.B. per 7-Zip) aus dem Firmware-Image entpacken muss. Ich werde hier nicht näher darauf eingehen denn das ist bereits im Thema Ändern des Branding und installieren der Retail-Firmware bei FRITZ!Box Cable 6490 näher beschrieben. Dort sind auch die jeweiligen Partitionen benannt in welche man die 4 Images hochladen muss. Zudem gibt es aufgrund der DualBoot-Unterstützung insg. 8 mögliche Partitionen für die Firmware.





Firmware-Image in den Flash-Speicher hochladen

Voraussetzung: Die Box ist bereits im Bootloader angehalten, siehe Beitrag #5.

Wie schon in Beitrag #3 (Hinweise und Voraussetzungen für PowerShell) erwähnt gehe ich in diesem Beispiel davon aus, dass sich das PowerShell-Script "EVA-FTP-Client.ps1" unter "C:\YourFritz\master\eva_tools\" und die Firmware-Images unter "C:\YourFritz\Images\" befinden. Bei Verbindungsproblemen an eine evtl. aktive (Personal)-Firewall denken:
  1. Man startet die PowerShell (Voraussetzungen s.h. Beitrag #3), falls diese vom vorhergehenden Schritt nicht mehr offen sein sollte:

    Code: Alles auswählen

    Windows PowerShell
    Copyright Microsoft Corporation. Alle Rechte vorbehalten.
    
    PS C:\Users\MaxMuster>
  2. Flashen der Partition mtd1 (Kernel, welche Partition beim verwendeten Modell die richtige ist bitte vorher verifizieren!) mit folgendem Kommando:

    Code: Alles auswählen

    c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -Verbose -Debug -ScriptBlock { UploadFlashFile c:\YourFritz\Images\kernel.image mtd1 }
    Nun abwarten bis das Image hochgeladen wurde.
Hinweis:
Bei den eMMC-Modellen (Puma 6 Modelle) müssen 4 Partitionen (z.B. mtd11, mtd12, mtd13 und mtd14 für das gerade inktive Partitionsset bei einer 6490) auf diese Art und Weise beschrieben werden und nicht nur eine.

Die Box kann nun mit dem folgendem Befehl und der hochgeladenen Firmware gestartet werden (Alternativ: Netzstecker kurz ziehen):

Code: Alles auswählen

c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -ScriptBlock { RebootTheDevice }
Fertig.

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

PowerShell für Windows - Flash-Methode für Modelle mit NAND-Speicher

#8 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:15

Firmware-Image erstellen/vorbereiten

Wer sich ein Freetz-Image baut kann Freetz dazu veranlassen das passende "image.in-memory" gleich mit zu erstellen. Möchte man dagegen ein anderes Firmware-Image hochladen (z.B. eine Inhaus-Version) oder hat vergessen Freetz ein passendes Image erstellen zu lassen kann sich mit FirmwareImage.ps1 erst einmal ein Image erstellen lassen welches anschließend weiterverwendet werden kann (im Beispiel davon ausgehend, dass sich die Ausgangsfirmware als "firmware.image" im Ordner C:/YourFritz/Images/ befindet):

Code: Alles auswählen

. c:\YourFritz\master\signimage\FirmwareImage.ps1
[FirmwareImage]::new("c:\YourFritz\Images\firmware.image").getBootableImage("c:\YourFritz\Images\firmware.image.in-memory")
Man beachte auch den Punkt und das Leerzeichen vor dem ersten Befehl. Das "exit" am Ende (das schließt die PowerShell-Konsole) war bei meinem Test notwendig da sonst die Datei "firmware.image.in-memory" nicht geschrieben wurde. Edit: Mit der aktuellen Version von FirmwareImage.ps1 soll lt. @PeterPawn das Problem behoben sein, das Schließen der Konsole ist also nicht mehr notwendig (ich selbst habe es zwar noch nicht getestet aber wenn man sich den dazugehörigen Commit anschaut denke ich auch, dass das Problem nun nicht mehr bestehen sollte).

Beispiel:

Code: Alles auswählen

Windows PowerShell
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

PS C:\Users\MaxMuster> . c:\YourFritz\master\signimage\FirmwareImage.ps1
This is "FirmwareImage.ps1" ...

a collection of PowerShell classes to handle AVM's firmware image files

... from the YourFritz project at https://github.com/PeterPawn/YourFritz

(C) 2017-2018 P. Haemmerlein (peterpawn@yourfritz.de)

Look at the comment lines from the beginning of this file to get further info, how to make use of the provided classes.

The classes are now ready to be used in this session.
PS C:\Users\MaxMuster> [FirmwareImage]::new("c:\YourFritz\Images\firmware.image").getBootableImage("c:\YourFritz\Images\firmware.image.in-memory")
PS C:\Users\MaxMuster>




Firmware-Image in den RAM hochladen und installieren lassen

Voraussetzung: Die Box ist bereits im Bootloader angehalten, siehe Beitrag #5.

Wie schon in Beitrag #3 (Hinweise und Voraussetzungen für PowerShell) erwähnt gehe ich in diesem Beispiel davon aus, dass sich das PowerShell-Script "EVA-FTP-Client.ps1" unter "C:\YourFritz\master\eva_tools\" und die Firmware-Images unter "C:\YourFritz\Images\" befinden. Bei Verbindungsproblemen an eine evtl. aktive (Personal)-Firewall denken.

Zu beachten ist, dass sich das in den RAM der FritzBox hochgeladene Firmware-Image üblicherweise in das gerade aktive Partitionsset schreibt (das bestimmt nicht der Bootloader sondern das verwendete Firmware-Image, also theoretisch könnte man das entsprechende Script in der Firmware dbzgl. auch abändern). Wenn man das nicht möchte also z.B. vorher die Environment-Variable "linux_fs_start" entsprechend abändern.

  1. Man startet die PowerShell (Voraussetzungen s.h. Beitrag #3), falls diese vom vorhergehenden Schritt nicht mehr offen sein sollte:

    Code: Alles auswählen

    Windows PowerShell
    Copyright Microsoft Corporation. Alle Rechte vorbehalten.
    
    PS C:\Users\MaxMuster>
  2. Bei Bedarf auslesen des aktiven Partitionsset (Variable "linux_fs_start") per folgendem Kommando:

    Code: Alles auswählen

    c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -ScriptBlock { GetEnvironmentValue linux_fs_start }
    Das Ergebnis sieht dann z.B. so aus:

    Code: Alles auswählen

    PS C:\Users\MaxMuster> c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -ScriptBlock { GetEnvironmentValue linux_fs_start }
    1
    PS C:\Users\MaxMuster>
  3. Den Wert der Variable linux_fs_start (hier im Beispiel "1") bei Bedarf ändern wenn man die Firmware im anderen (derzeit inaktiven) Partitionsset installieren möchte (ansonsten diesen Schritt einfach überspringen):

    Code: Alles auswählen

    c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -Verbose -ScriptBlock { SwitchSystem }
    In diesem Beispiel ist der aktuelle Wert 1. Das bedeutet, das Script setzt den Wert auf 0, das sieht dann so aus:

    Code: Alles auswählen

    PS C:\Users\MaxMuster> c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -Verbose -ScriptBlock { SwitchSystem }
    AUSFÜHRLICH: current setting - linux_fs_start=1
    AUSFÜHRLICH: new setting     - linux_fs_start=0
    AUSFÜHRLICH: new value set successfully
    True
    PS C:\Users\MaxMuster>

  4. Hochladen des In-Memory Images mit folgendem Kommando:

    Code: Alles auswählen

    c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -Verbose -Debug -ScriptBlock { BootDeviceFromImage c:\YourFritz\Images\firmware.image.in-memory }
    • Alternativ für die IPQ4019-Modelle (FRITZ!Box 7520, 7530 und FRITZ!Repeater 3000) mit zusätzlichem Parameter 0 (Null oder False):

      Code: Alles auswählen

      c:\YourFritz\master\eva_tools\EVA-FTP-Client.ps1 -Verbose -Debug -ScriptBlock { BootDeviceFromImage c:\YourFritz\Images\firmware.image.in-memory 0 }
      Weiteres dazu siehe Beitrag von @PeterPawn im IPPF: https://www.ip-phone-forum.de/posts/2320843/
    Nun abwarten bis das Image hochgeladen wurde.

Hinweis
Nach dem Hochladen des Image kann die PowerShell-Konsole geschlossen werden aber die Box darf noch nicht von der Stromversorgung getrennt werden!
Die Box nach dem hochladen der Firmware in den RAM eine Weile in Ruhe zu lassen (nicht die Stromzufuhr unterbrechen), es ist normal, dass die Box während des Vorganges zweimal neu startet.

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Shell-Script für *nix - Flash-Methode für Modelle mit NOR- oder eMMC-Speicher

#9 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:16

Firmware-Image vorbereiten, NOR-Flash Modelle

Zuerst muss die "kernel.image" aus dem jeweiligen Firmware-Image entpackt werden denn nur diese Datei wird anschließend über den Bootloader in den Flash-Speicher geschrieben. Die Datei "firmware.image" hat bei den NOR-Flash Modellen (zumindest seit Kernel-Ver. 2.6) keine Bedeutung mehr da nur eine Partition im Flash-Speicher für das Firmware-Image verwendet wird (im "kernel.image" ist also auch das filesystem mit enthalten und nicht nur der Kernel).

Das Firmware-Image ist ein TAR-Archiv, man kann also die darin enthaltene Datei "kernel.image" z.B. mit 7-Zip oder tar entpacken:

Code: Alles auswählen

tar -xf ~/Downloads/YourFritz/images/firmware.image -O ./var/tmp/kernel.image > ~/Downloads/YourFritz/images/kernel.image


Firmware-Image vorbereiten, eMMC-Flash Modelle (Cable-Modelle auf Basis Puma 6)

Prinzipiell ist das vorgehen hier ähnlich wie bei den NOR-Flash Modellen aber im Gegesatz dazu ist bei den Puma 6 Modellen (FRITZ!Box 6430, 6490 und 6590) nicht nur Kernel- und Filesytem wieder getrennt sondern es gibt auch noch 2 verschiedene Prozessoren (ARM und x86 Core) mit jeweils eigener Firmware. Also sind insgesamt 4 Images hochzuladen die man vorher (z.B. per 7-Zip) aus dem Firmware-Image entpacken muss. Ich werde hier nicht näher darauf eingehen denn das ist bereits im Thema Ändern des Branding und installieren der Retail-Firmware bei FRITZ!Box Cable 6490 näher beschrieben. Dort sind auch die jeweiligen Partitionen benannt in welche man die 4 Images hochladen muss. Zudem gibt es aufgrund der DualBoot-Unterstützung insg. 8 mögliche Partitionen für die Firmware.





Firmware-Image in den Flash-Speicher hochladen

Ich gehe in diesem Beispiel davon aus, dass sich die Kopie des YourFritz-Repository unter "~/Downloads/YourFritz/yourfritz-master/", die Firmware-Images unter "~/Downloads/YourFritz/images/" befinden und dass die Box bereits im Bootloader angehalten wurde und dieser über die IP-Adresse 192.168.178.1 erreichbar ist (die Netzwerkschnittstelle sollte natürlich bereits entsprechend konfiguriert sein und DHCP nicht verwenden, siehe Beitrag #5).
  1. Man startet ein Terminal und wechselt in den Ordner "eva_tools" von YourFritz (falls nicht bereits geschehen):

    Code: Alles auswählen

    cd ~/Downloads/YourFritz/yourfritz-master/eva_tools/
    Oder (als Beispiel) wenn man die YourFritz-Kopie von Freetz verwendet:

    Code: Alles auswählen

    cd ~/Downloads/freetz-trunk/tools/yf/eva_tools/

  2. Flashen der Partition mtd1 (Kernel, welche Partition beim verwendeten Modell die richtige ist bitte vorher verifizieren!) mit folgendem Kommando:

    Code: Alles auswählen

    ./eva_store_tffs mtd1 ~/Downloads/YourFritz/images/kernel.image 192.168.178.1
    Nun abwarten bis das Image hochgeladen wurde.
Hinweis:
Bei den eMMC-Modellen (Puma 6 Modelle) müssen 4 Partitionen (z.B. mtd11, mtd12, mtd13 und mtd14 für das gerade inktive Partitionsset bei einer 6490) auf diese Art und Weise beschrieben werden und nicht nur eine.

Anschließend kann die Box mit der hochgeladenen Firmware gestartet werden (dazu Netzstecker kurz ziehen oder per FTP mit dem Bootloader verbinden und den Befehl "REBOOT" absenden), Fertig.

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Shell-Script für *nix - Flash-Methode für Modelle mit NAND-Speicher

#10 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:24

Firmware-Image erstellen/vorbereiten

Wer sich ein Freetz-Image baut kann Freetz dazu veranlassen das passende "image.in-memory" gleich mit zu erstellen. Möchte man dagegen ein anderes Firmware-Image hochladen (z.B. eine Inhaus-Version) oder hat vergessen Freetz ein passendes Image erstellen zu lassen kann sich mit image2ram erst einmal ein Image erstellen lassen welches anschließend weiterverwendet werden kann (im Besipiel davon ausgehend, dass sich die Ausgangsfirmware als "firmware.image" im Ordner ~/Downloads/YourFritz/images/ und die Kopie des YourFritz-Repository unter ~/Downloads/YourFritz/yourfritz-master/ befindet):
  1. Man startet ein Terminal und wechselt in den Ordner "eva_tools" von YourFritz (falls nicht bereits geschehen):

    Code: Alles auswählen

    cd ~/Downloads/YourFritz/yourfritz-master/eva_tools/
    Oder (als Beispiel) wenn man die YourFritz-Kopie von Freetz verwendet:

    Code: Alles auswählen

    cd ~/Downloads/freetz-trunk/tools/yf/eva_tools/

  2. Erstellen des In-Memory Images mit folgendem Befehl:

    Code: Alles auswählen

    ./image2ram < ~/Downloads/YourFritz/images/firmware.image > ~/Downloads/YourFritz/images/firmware.image.in-memory




Firmware-Image in den RAM hochladen und installieren lassen

Ich gehe in diesem Beispiel davon aus, dass sich die Kopie des YourFritz-Repository unter "~/Downloads/YourFritz/yourfritz-master/", die Firmware-Images unter "~/Downloads/YourFritz/images/" befinden und dass die Box bereits im Bootloader angehalten wurde und dieser über die IP-Adresse 192.168.178.1 erreichbar ist (die Netzwerkschnittstelle sollte natürlich bereits entsprechend konfiguriert sein und DHCP nicht verwenden, siehe Beitrag #5).

Zu beachten ist, dass sich das in den RAM der FritzBox hochgeladene Firmware-Image üblicherweise in das gerade aktive Partitionsset schreibt (das bestimmt nicht der Bootloader sondern das verwendete Firmware-Image, also theoretisch könnte man das entsprechende Script in der Firmware dbzgl. auch abändern). Wenn man das nicht möchte also z.B. vorher die Environment-Variable "linux_fs_start" entsprechend abändern.

  1. Man startet ein Terminal und wechselt in den Ordner "eva_tools" von YourFritz (falls nicht bereits geschehen):

    Code: Alles auswählen

    cd ~/Downloads/YourFritz/yourfritz-master/eva_tools/
    Oder (als Beispiel) wenn man die YourFritz-Kopie von Freetz verwendet:

    Code: Alles auswählen

    cd ~/Downloads/freetz-trunk/tools/yf/eva_tools/

  2. Nun kann man die gewünschte Firmware (hier im Beispiel die Datei "firmware.image.in-memory" im Ordner ~/Downloads/YourFritz/images/) in den RAM der FritzBox laden:

    Code: Alles auswählen

    ./eva_to_memory ~/Downloads/YourFritz/images/firmware.image.in-memory 192.168.178.1
    • Alternativ für die IPQ4019-Modelle (FRITZ!Box 7520, 7530 und FRITZ!Repeater 3000) mit zusätzlichem Parameter 0 (Null):

      Code: Alles auswählen

      ./eva_to_memory ~/Downloads/YourFritz/images/firmware.image.in-memory 192.168.178.1 0
      Weiteres dazu siehe Beitrag von @PeterPawn im IPPF: https://www.ip-phone-forum.de/posts/2320843/
    Nun abwarten bis das Image hochgeladen wurde.

Wurde die Box noch nicht im Bootloader angehalten kann man auch eva_discover zu Hilfe nehmen, hierzu die Box von der Stromzufuhr trennen und gleich nach dem Absetzen des folgenden Befehl die Stromzufuhr zur Box wiederherstellen (entsprechende Ethernetverbindung zwischen Rechner und Box und entsprechende Konfiguration der Netzwerkschnittstelle vorausgesetzt):

Code: Alles auswählen

eval $(sudo ./eva_discover INTERFACE=ens1 FROM=192.168.178.20 TO=192.168.178.1 BLIP=1 HOLD=0); echo "EVA_FOUND=$EVA_FOUND"; echo "EVA_IP=$EVA_IP"; [ "$EVA_FOUND" = "1" ] && ./eva_to_memory ~/Downloads/YourFritz/images/firmware.image.in-memory $EVA_IP
Die Variablen/Namen für INTERFACE (ens1), FROM (192.168.178.20) und TO (192.168.178.1) sind hier nur als Beispiel gedacht und müssen natürlich nach Bedarf den Gegebenheiten angepasst werden. Den richtigen Schnittstellennamen für die Netzwerkkarte (hier im Beispiel "ens1") kann man z.B. mit dem Befehl

Code: Alles auswählen

ifconfig
herausbekommen.


Hinweis
In beiden Fällen ist es jedenfalls wichtig nach dem Hochladen der Firmware in den RAM die Box eine Weile in Ruhe zu lassen (nicht die Stromzufuhr unterbrechen)! Es ist normal, dass die Box während des Vorganges zweimal neu startet.

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Alternative Methoden (nur Erwähnung, keine Beschreibung)

#11 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:27

Für die NOR-Flash Modelle kann auch das in Freetz enthaltene Script push_firmware verwendet werden:
https://www.zebradem.com/wiki/index.php ... irmware.sh


Weiterhin kann man die Firmware auch manuell z.B. mit Hilfe eines geeigneten FTP-Client hochladen, für die Puma 6 Modelle (FRITZ!Box 6430, 6490 und 6590) habe ich das in folgendem Thema beschrieben:
Ändern des Branding und installieren der Retail-Firmware bei FRITZ!Box Cable 6490

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

Hinweis für Ergänzungs- und Korrekturvorschläge

#12 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:29

Für Hinweise/Informationen zu Fehlern, Korrekturvorschläge oder Ergänzungen wäre ich dankbar. Ihr könnt mir auch gerne eine PM schreiben.



Beiträge mit kleineren Hinweisen, Tipps oder Korrekturvorschlägen werde ich hier im Thema nach Übernahme (und natürlich entsprechender Erwähnung des Hinweis-/Tippgebers im Changelog) löschen (ausblenden) ohne separate Info-PN.
Auf Wunsch (evtl. mit nachvollziehbarer Begründung) können gelöschte Beiträge auch wiederhergestellt werden da ich diese nicht wirklich löschen werde.

Beiträge mit "komplexeren" (auch kritischen) Inhalt oder entsprechende Diskussionen (wenn sie nicht Off-Topic sind) werde ich hier natürlich nicht löschen (es sei denn der Autor wünscht dies), zumindest nicht kommentarlos.

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

To-Do/Changelog

#13 Beitrag von qwertz-asdfgh » 1. Dez 2018 02:33

To-Do List:
  • -


Changelog:
  • 2018-12-01: Beitrag #3 - Ergänzender Hinweis zu verwendbaren PowerShell-Versionen
  • 2018-12-01: Beitrag #3 - Ergänzender Hinweise zum Download der PowerShell-Scripte aus dem GitHub-Repository (Dank an PeterPawn für den Hinweis)
  • 2018-12-01: Beitrag #8 - Schließen der Konsole zum schreiben des In-Memory Images per FirmwareImage.ps1 nicht mehr notwendig (Dank an PeterPawn für den schnellen Fix)
  • 2018-12-04: Beitrag #8 - Fehlende Pfadangabe zum In-Memory Image beim Befehl zum hochladen des Images in den RAM (Pkt. 4) hinzugefügt ("c:\YourFritz\Images\..." anstatt ".\...")
  • 2018-12-08: Beitrag #6 - Einige Partitionsangaben ergänzt
  • 2018-12-08: Beitrag #7 - Weitere Möglichkeit zum entpacken der kernel.image hinzugefügt (FirmwareImage.ps1)
  • 2019-02-27: Beitrag #6 - Repeater-Modelle 1200 und 3000 aufgenommen
  • 2019-03-16: Beitrag #6 + #8+ #10 - Ergänzungen für die IPQ4019-Modelle
  • 2019-05-08: Beitrag #3 - Hinweis zur Installation des WMF 5.1 bei Windows 7 hinzugefügt

Benutzeravatar
Micha0815
Fortgeschrittener
Fortgeschrittener
Beiträge: 32
Registriert: 22. Okt 2017 12:42
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal
Status: Offline

[HowTo] FRITZ!Box Firmware-Images (auch unsignierte) über den Bootloader installieren

#14 Beitrag von Micha0815 » 1. Dez 2018 19:59

WOW und vielen Dank ... wohl unisono im Namen der Mitglieder und der stillen Leserschaft.

Zu #10 und #11 treibt mich die Frage um, was denn nun bei der Alternative (AlternativSkripte) "modfs" am bsp. einer FB7490 herauskommt, falls man sich darüber als Quell-Image ein Aktuelles InHaus-Image vornimmt?
Vielleicht siehst Du dies als "Sonderfall der unterstützen FB-Modelle" an, der es würdig ist, erwähnt zu werden?
Der Ursprungsthread ist mittlerweile so ellenlang und z.T. (in älteren Abschnitten) überholt, sodass hier eine Erwähnung ab status quo durchaus Sinn machte?
LG
P.S.: Falls obsolet bitte Löschen
Home 1:7390(OS 6.83)WAN via FB7490 (OS 6.90/6.88 modfs) im WLAN-Rep.-Modus AC 975/975MBit/s zu
Betreut Home1-Nachbar-Basis:FB7490 (OS 06.90/06.88modfs) 50/10K/1&1/FVD/
Home2: FB7490 (06.83/06.80modfs)ISP/Masmovil 0,5bis5 GB m.10.XX.er-IP (E3131 mit ext. Thiecom SLP15 ). Home2 verbunden via VPN zu Home1 mit allen SIP-Features -Dank "Käpsele"-
Betreut Div. FB7240 und 7490int in AT

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

[HowTo] FRITZ!Box Firmware-Images (auch unsignierte) über den Bootloader installieren

#15 Beitrag von qwertz-asdfgh » 1. Dez 2018 21:13

modfs ist primär ein Tool um die Firmware zu modifizieren, hat also mit Beitrag #10 oder #11 m.E. eigentlich nichts zu tun und passt meiner Ansicht nach hier auch nicht in das Thema denn hier geht es primär darum ein Firmware-Image (auch unmodifizierte) per Bootloader zu installieren.

Wenn man bereits eine modifizierte Firmware auf der Box hat (z.B. mit modfs modifiziert oder eine ältere Inhaus-Version) und diese u.a. bereits einen Konsolenzugang enthält braucht man eine unsignierte Firmware nicht über den Bootloader installieren, ein vorhandener Konsolenzugang eröffnet weitere Installations-Möglichkeiten (z.B. kann man darüber den benötigten Key für die Signaturüberprüfung nachträglich hinzufügen oder aber die gewünschte Firmware darüber direkt in den Flashspeicher schreiben), das wäre aber meiner Ansicht nach eher etwas für ein anderes Thema.

maxfrisch
Einsteiger
Einsteiger
Beiträge: 2
Registriert: 6. Mär 2019 11:12
Status: Offline

[HowTo] FRITZ!Box Firmware-Images (auch unsignierte) über den Bootloader installieren

#16 Beitrag von maxfrisch » 6. Mär 2019 11:17

Hi,
was für eine Anleitung! Respekt und vielen Dank! Eine Anfänger-Frage: ich möchte eine gefritzte Speedport w 721v (7170) wieder entfritzen. Kann ich hierfür diese Anleitung (1. Methode?) auch verwenden? Danke, Max

Benutzeravatar
qwertz-asdfgh
Globaler Moderator
Globaler Moderator
Beiträge: 303
Registriert: 18. Okt 2017 21:47
Wohnort: Südliches T. d. A.
Hat sich bedankt: 4 Mal
Danksagung erhalten: 79 Mal
Status: Offline

[HowTo] FRITZ!Box Firmware-Images (auch unsignierte) über den Bootloader installieren

#17 Beitrag von qwertz-asdfgh » 6. Mär 2019 15:53

Der W721V ist verwandt mit der 7170 und die ist wiederum ein NOR-Flash Modell > mtd1.

Das gilt für alle älteren FritzBox-Modelle vor der 7270. Und mtd1 (nur eine Partition ohne mtd0) gilt m.W.n. für alle Modelle ab Kernel-Version 2.6.

maxfrisch
Einsteiger
Einsteiger
Beiträge: 2
Registriert: 6. Mär 2019 11:12
Status: Offline

[HowTo] FRITZ!Box Firmware-Images (auch unsignierte) über den Bootloader installieren

#18 Beitrag von maxfrisch » 8. Mär 2019 20:38

Prima, danke. Dann Versuch ich mein Glück mit der Windows / Power-Shell Variante.

Antworten

Zurück zu „FRITZ!Box Modifikationen“