====== Fonera mit OpenWRT ======
Um die Fonera 2201 zu flashen, werden 2 Dinge benötigt:
- Das OpenWRT Image
- 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 =====
* [[http://mesh.menole.net/download/flash-images/11949-latest/ |OpenWRT Images]]
==== 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
aptitude install libnet-telnet-perl
nachinstalliert werden.
* //redboot.pl//:
#!/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 \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:
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