Fonera mit OpenWRT

Um die Fonera 2201 zu flashen, werden 2 Dinge benötigt:

  1. Das OpenWRT Image
  2. Das Skript redboot.pl

Mittels des redboot-Perlskriptes wird die Redboot-Umgebung der Fonera geladen, in der eine Kommandozeile zur Verfügung steht. Via TFTP wird das Image auf die Fonera übertragen und kann dort als Betriebssystem eingerichtet werden.

Vorbereitungen

TFTP-Server

Falls nicht geschehen, muss auf einem Server ein TFTP-Server eingerichtet werden. Im /tftpboot-Verzeichnis werden die Dateien

  • openwrt-atheros-root.jffs2-64k
  • openwrt-atheros-vmlinux.lzma

für den Zugriff durch die Fonera abgelegt.

Redboot

Das Skript redboot.pl wird auf dem Server abgelegt. Wichtig ist, dass die Net::Telnet Bibliothek zur Verfügung steht. Auf Debian-Systemen kann sie unter

bash

aptitude install libnet-telnet-perl

nachinstalliert werden.

  • redboot.pl:

perl

#!/usr/bin/perl -w
 # telnet_redboot.pl - ./upslug --reset;arping -f 192.168.0.1;telnet 192.168.0.1 9000

 use Net::Telnet ();

 my $host = $ARGV[0] or die "Syntax: $0 <host>\n";

 system("while true; do fping -t200 $host && break; done");

 my $t = new Net::Telnet (Port => 9000, Timeout => 30);
 if(!defined($t)){
     print "new Net::Telnet failed\n";
     exit(1);
 } # if
 my $ok;
 $ok = $t->errmode("return");
 $ok = $t->open($host);
 if(!defined($ok)){
     print "open('$host') failed\n";
     $t->close();
     exit(1);
 } # if

 # == Executing boot script in 1.930 seconds - enter ^C to abort

 my $line;
 while($line = $t->getline()){
        $line =~ s/[\r\n]//;
        print "-> $line\n";
        if($line =~ m/enter \^C to abort/){
                $t->put(chr(3)); # send ^C
                print "<- \^C\n";
                $t->close();
                sleep(1);
                system("telnet $host 9000");
                exit(0);
        } # if
 } # while
 $t->close();

IP-Einstellungen

Für den Zugriff auf die Fonera muss auf dem Server eine Adresse im Netz 192.168.1.X eingerichtet werden. Die Fonera selbst ist unter der 192.168.1.1 erreichbar.

Durch die Definition eines virtuellen Interfaces ethX:1 kann eine entsprechende Adresse im Fonera-Netzwerk eingerichtet werden:

bash

ifconfig eth2:1 192.168.1.220/24

Bootvorgang

Es bleiben nur wenige Sekunden nach dem Einschalten der Fonera (Netzstecker!), um das redboot-Skript durchzuführen. Ist dies nicht geschehen, so bootet die Fonera mit dem installierten Betriebssystem wie gewohnt hoch.

Wurde alles richtig gemacht, so steht der Redboot-Prompt jetzt zur Verfügung:

root@server01:/tftpboot# ./redboot.pl 192.168.1.1
192.168.1.1 is alive
-> == Executing boot script in 14.460 seconds - enter ^C to abort
<- ^C
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
RedBoot> 

Installation des OpenWRT Images

Netzwerkeinstellungen Fonera

Um das Image vom TFTP-Server beziehen zu können, muss der Fonera eine IP-Adresse zugewiesen werden:

RedBoot> ip_addr -h 192.168.1.220 -l 192.168.1.1/24 
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.220

Initialisieren des Flash-Speichers

Der begrenzte Flashspeicher muss für den Installationsvorgang initialisiert werden.

  • WARNUNG: Dieser Vorgang entfernt alle bisherigen Betriebssysteme und Einstellungen.
RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Image-Datei laden

Zum Übertragen des Robin-Images, muss folgender Befehl abgesetzt werden:

RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded 0x80040400-0x800f03ff, assumed entry at 0x80040400

Damit wird die Image-Datei in den lokalen Speicher übertragen.

Installation

Die Installation dauert einige Minuten, da die Imagedatei auf der Fonera lokal ausgerollt werden muss:

RedBoot> fi cr -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
... Erase from 0xa8030000-0xa80e0000: ...........
... Program from 0x80040400-0x800f0400 at 0xa8030000: ...........
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Freien Speicher berechnen

Mit fis free lässt sich der freie Speicherbereich der Fonera anzeigen.

RedBoot> fis free
  0xA80E0000 .. 0xA87E0000

Angegeben wird die Start- und die Endadresse des freien Speicherbereichs. Die Differenz beider Werte ergibt den freien Speicherbereich und wird für die Einrichtung des Filesystems benötigt. Mit dem bc ist die Berechnung der Hexadezimalwerte möglich:

user@server01:~$ bc
bc 1.06.94
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
obase=16
ibase=16
A87E0000-A80E0000
700000

Der Wert 700000 entspricht also dem freien Speicherbereich.

Laden des Dateisystems

RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-root.jffs2-64k
Using default protocol (TFTP)
Raw file loaded 0x80040400-0x804e03ff, assumed entry at 0x80040400

Einrichten des rootfs-Dateisystems

Mit dem berechneten Wert 700000 kann die rootfs-Partition angelegt werden:

RedBoot> fi cr -l 0x700000 rootfs
... Erase from 0xa80e0000-0xa87e0000: ................................................................................................................
... Program from 0x80040400-0x804e0400 at 0xa80e0000: ..........................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Der Vorgang dauert mehrere Minuten.

Persistentes Speichern der Konfiguration

Die Installation des neuen Images auf der Fonera ist abgeschlossen. Die Einstellungen müssen jedoch noch persistent gespeichert werden, um auch nach einem Reboot zur Verfügung zu stehen.

RedBoot> fconfig boot_script true
boot_script: Setting to true
RedBoot> fconfig boot_script_timeout 15
boot_script_timeout: Setting to 15
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> fconfig boot_script_data
boot_script_data: 
.. fis load -b 0x80100000 loader
..  go 0x80100000
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.l7
>> exec
>> 
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Kontrolle der Konfiguration

  • Speicher überprüfen:
RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0xA8000000  0xA8000000  0x00030000  0x00000000
vmlinux.bin.l7    0xA8030000  0x80041000  0x000B0000  0x80041000
rootfs            0xA80E0000  0x80040400  0x00700000  0x80040400
FIS directory     0xA87E0000  0xA87E0000  0x0000F000  0x00000000
RedBoot config    0xA87EF000  0xA87EF000  0x00001000  0x00000000
  • Konfiguration überprüfen:
RedBoot> fconfig -l -n
boot_script: true
boot_script_data: 
.. fis load -l vmlinux.bin.l7
.. exec

boot_script_timeout: 15
bootp: false
bootp_my_gateway_ip: 0.0.0.0
bootp_my_ip: 192.168.1.1
bootp_my_ip_mask: 255.255.255.0
bootp_server_ip: 192.168.1.254
console_baud_rate: 9600
gdb_port: 9000
info_console_force: false
net_debug: false

NEU STARTEN

RedBoot> reset
 
wissen/openwrt/fonera_mit_openwrt.txt · Zuletzt geändert: 27.07.2009 20:52 von tirili
 
Recent changes RSS feed Donate Valid XHTML 1.0 Valid CSS Recent cached RSS feed cacert-signed web site: inhalt.serviert.de