Fritz Box Fon: Flash programmieren, wenn nur noch der Bootloader lebt ===================================================================== Der Bootloader der Fritz Box Fon, der sich auch in anderen AR7-basierten Geräten findet (ADAM2, s. http://sub.st/articles/hacking-the-actiontec-gt701-wg-wireless-gateway.html, der dortige Tcpdump des Actiontec Recovery Vorgangs war _sehr_ hilfreich), bietet die Möglichkeit, per (modifiziertem) FTP das Flash zu programmieren. Ich habe inzwischen ein Perl-Skript geschrieben, dass den ADAM2 FTP-Server bedienen kann: Boot-IP setzen, Flashen und Rebooten scheint so weit zu funktionieren. (http://www.akk.org/~enrik/fbox/recover) Aufteilung der Flash Partitionen: mtd0: squash fs image ("filesystem.image") mtd1: kernel zimage ("kernel.image") mtd2: ADAM2 ("urlader") mtd3: environment? mtd4: config (TTFS)? Beispiel für Lesen/Setzen von Environment-Variablen, wenn die Box noch bootet, aber aufgrund von zu viel Spieltrieb z.B. der Webserver nicht mehr funktioniert: ------------------------------------------------------------------------------ Da die FTP-Implementierung im Bootloader nicht ganz sauber ist, ist es besser, folgendes "raw" über eine Telnet-Verbindung auf Port 21 (ca. innerhalb der ersten 5 Sekunden nach dem Einschalten der Box) zu erledigen. Um das Environment (Key-Value-Paare, die dem Bootloader zur Verfügung stehen) zu bearbeiten, unterstützt der FTP-Server der Firmware folgende Befehle: - GETENV : Lesen der Variable - SETENV ,: Schreiben von in die Variable - UNSETENV : Variable auf "NULL" setzen Im Dialog sieht das dann so aus: $ telnet 192.168.178.1 21 Trying 192.168.178.1... Connected to 192.168.178.1 Escape character is '^]'. 220 ADAM2 FTP Server ready. USER adam2 331 Password required for adam2. PASS adam2 230 User adam2 successfully logged in. SETENV my_ipaddress,192.168.128.28 200 SETENV command successful GETENV 192.168.128.28 my_ipaddress 192.168.128.28 200 GETENV command successful REBOOT 221-Thank you for using the FTP service on ADAM2. 221 Goodbye. Connection closed by foreign host. (my_ipaddress im Beispiel ist die IP, die der Bootloader benutzt, im Betrieb ist diese dann nicht mehr gültig.) Beispiel für Upload und Flashen eines kernel.image nach mtd1: ------------------------------------------------------------- Mit ftp client während der ersten 5 Sekunden nach Einschalten der Box auf die wohlbekannte IP connecten, "MEDIA FLSH" senden, upload auf Datei mit Leerzeichen im Namen, der Teil nach dem Leerzeichen ist das Ziel: $ ftp 192.168.178.1 Connected to 192.168.178.1. 220 ADAM2 FTP Server ready. Name (192.168.178.1:enrik): adam2 331 Password required for adam2. Password: adam2 230 User adam2 successfully logged in. Remote system type is UNIX. ftp> debug Debugging on (debug=1). ftp> bin ---> TYPE I 200 Type set to I. ftp> quote MEDIA FLSH ---> MEDIA FLSH 200 Media set to FLSH. ftp> put kernel.image "kernel.image mtd1" local: kernel.image remote: kernel.image mtd1 ---> PORT 192,168,178,20,128,67 200 Port command successful. ---> STOR kernel.image mtd1 150 Opening BINARY mode data connection for file transfer. 226 Transfer complete. 655368 bytes sent in 5.96 secs (107.4 kB/s) ftp> quote REBOOT ---> REBOOT 221-Thank you for using the FTP service on ADAM2. 221 Goodbye. ftp> quit ---> QUIT Auf der Konsole sieht das ganze parallel dazu so aus: | Erasing from 0xb0010000 to 0xb00c0000. | FlashEraseBlock(b0010000,b00bffff); | ........... | Erase Successful. | | ........... | Rebooting the system in 3 secs... (Die untere Reihe Punkte wird beim eigentlichen Flash-Schreiben ausgegeben.) # Copyright (C) 2004 Enrik Berkhan # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA