OpenWRT auf dem "Horst" der HorstBox

Horst: Mischung von OpenWrt und DLINK-System

Also OpenWrt (bleeding edge Kamikaze) läuft jetzt zwar grundsätzlich bei mir. Was ich aber noch haben will und was bei OpenWrt nicht dabei ist:
- Treiber für ISDN und die FXO/FXS-Anschlüsse (Analogtelefonie).
- Asterisk-Zaptelmodul (Bristuff) für ISDN-Aschlüsse.

Aus Zeitgründen habe ich mir jetzt ein gemischtes OpenWrt/DLINK-System hingebastelt:

Das rootfs von OpenWrt, aber:
- Kernel (zImage) von D-Link
- /lib/modules/2.6.16.9/...-Module von D-Link
- /lib/firmware/... von D-Link
- asterisk von D-Link

Die D-Link-Sachen sind dabei aber nicht aus dem Original-Dateisystem im Flash. Stattdessen habe ich mir die Horstbox-Entwicklungsumgebung installiert, und das Zeug neu kompiliert. Damit bekommt man noch weitere Asterisk-Module für /usr/lib/asterisk/modules

Interessant noch: Der Flashspeicher von Horst ist ja angeblich 32MB groß. Er wird von RedBoot jedoch nur halb erkannt und angezeigt. Linux findet dort noch zwei weitere Partitionen. Der Kernel 2.6.16.9 von D-Link findet beim Booten noch eine Partition "spare1" (8MB) in mtd7 an und eine "spare2" in mtd8. Einen Openwrt-Kernel 2.6.26 hatte ich auch mal gebootet, der hatte, glaub ich, die beiden Teile zusammengefasst angezeigt.

Die "spare2" wird jedoch eigenartigerweise als 12MB gemeldet. Hat die Horstbox vielleicht sogar 36MB Flash?

Ich hab bei mir das "spare1" als JFFS2-System eingerichtet und dort die Asterisk-Sachen hinkopiert.

Dazu musste ich es mit dem bei OpenWrt mitinstalliertem Programm "mtd" erasen und konnte es dann als JFFS2-System mounten. JFFS2-Dateisysteme müssen übrigens nicht initialisiert werden; Es reicht, wenn im Flashspeicher die durch das Erasen hinterlassenen Erase-Signaturen stehen. Es gibt zwar auch ein mkjffs2-Programm, aber das dient zum Erstellen eine JFFS2-Images aus einem existierenden Dateibaum.

"spare2"/mtd8 habe ich noch nicht benutzt. [paranoide] Die Größenangabe 12MB hat mich stutzig gemach. Nicht dass es da ein Hardware-Adresswraparound gibt und ich den RedBoot überschreibe.[/paranoide].


1. Nachtrag
Also ich hab diese Flash-Geschichte nochmals genauer untersucht. Der RedBoot-Lader, den D-Link/Maxima da installiert hat, scheint mir etwas vergurkt zu sein.

Da ist ja erstmals, dass der kein TFTP-Zugriff kann. hehol hat in diesem Forum allerdings beschrieben, wie man ihn austauscht mit einer Version, die das kann.

Jetzt diese Flash-Sache. Der RedBoot legt seine Partitionstabelle anscheinend normalerweise in den letzten Block des Flashspeichers. In die Linuxkernels läßt sich nämlich reinkonfigurieren, wo Linux den suchen soll. Bei neueren Kernels gibts da dann die Möglichkeit, mit einem negativen Offset den Ort relativ zum Speicherende anzugeben.

Bei "unserem" Redboot liegt die Partitionstabelle aber am Ende des halben Flashspeichers. Der Redboot kennt den ganzen Rest nicht. Offensichtlich ist vorgesehen, dass es eine HorstBox-Version mit nur halbsogroßem Flashspeicher gibt.

Der 32MiB große Flashspeicher besteht aus 256 Blöcken von 0x20000=131072 Bytes. Bei der Änderung von auch nur einem einzelnem Byte innerhalb eines Blocks muss der gesamte Block neu geflasht werden.

Die erste Hälfte des Speicher besteht also aus den Blöcken 0 bis 127. Und im Block 127 liegt die Partitionstabelle. Und zwar am Anfang des Blocks; der Rest davon ist unbenutzt und damit verschenkt. Dem Kernel muss in einer Konfigurationsoption als Tabellenort der Wert 127 angegeben werden, siehe auch hier.

Egal, könnte man denken, wenn RedBoot den Rest nicht kennt, der Linuxkernel kanns ja besser machen. Der OpenWrt-Kernel (SVN-Entwicklerversion, Nov 2008 ) findet tatsächlich richtig die zweite Hälfte, weist ihr ein mtd-Device mit einer Nummer um Eins größer als die letzte RedBoot-Partition zu, und nennt sie "boardconfig".

Nicht aber der Kernel auf der HorstBox-Entwickler-CD. Der findet zwar auch den freien Platz, aber er erzeugt zwei mtd-Devices und nennt ihre Bereiche spare1 und spare2. Und er macht dies grottenfalsch: sie überlappen sich im Flashspeicher. Hier die Kernelmeldungen, wo man das schön sieht:
Code:
Creating 7 MTD partitions on "IXP4XX-Flash.0":
0x00000000-0x00080000 : "RedBoot"
0x00080000-0x000c0000 : "nvram"
0x000c0000-0x001c0000 : "zImage"
0x001c0000-0x00920000 : "rootfs"
0x00920000-0x00fc0000 : "rootfs_data"
0x00fc0000-0x00fc1000 : "RedBoot config"
0x00fe0000-0x01000000 : "FIS directory"
Creating 2 MTD partitions on "IXP4XX-Flash.0":
0x01000000-0x01800000 : "spare1"
0x01400000-0x02000000 : "spare2"
Ein Blick in den D-Link-Kernelcode, Datei linux-2.6.16.9/drivers/mtd/maps/ixp4xx.c zeigt dann auch den Fehler:
Code:
#ifdef CONFIG_MACH_HORSTBOX
        if (!err && info->mtd->size == 0x2000000 /* 32MB */ ) {
                const struct mtd_partition my_partitions[] = {
                        {
                                name:   "spare1",
                                offset: 0x1000000,
                                size:   0x800000
                        },
                        {
                                name:   "spare2",
                                offset: 0x1400000,
                        },
                };

                err = add_mtd_partitions(info->mtd, my_partitions, 2);
                if(err)
                        printk(KERN_ERR "Could not add additional partitions\n");
        }
#endif
Lösung? Wahrscheinlich den Code patchen, was ich allerding erstmals lasse. Ansonsten nur spare2 verwenden und spare1 unbenutzt lassen; damit kann man immerhin noch 12MB nutzen.
 
Zuletzt bearbeitet:
Hey ein dickes Lob an alle die OpenWRT versuchen zum Laufen zu bringen!
Mangels meiner entsprechenden Kentnisse in Linux habe ich mich nicht herangetraut. Aber ich freue mich, hier ein paar aktive Entwickler zu sehen und möchte euch ermuntern, weiterzumachen!
 
Soweit ich weis hat die Horstbox zwei Flashbausteine. Standartmäßig wird von Linux aber nur der erste erkannt und genutzt. Deswegen muss der Patch von D-Link/Maxina auch noch rein.
(werd ich mir irgendwann mal annehmen)

OpenWRT erkennt "spare1" und "spare2" so einfach nicht.

Auch der RedBoot ist stark verbastelt...

Ich denke die Größte Arbeit kommt erst noch wenn ISDN und Analog mit Asterisk laufen soll.

Ich hoffe mal das ein SVN in Zukunft kommen soll wo alle mitmachen können.

PS: Kann bitte jemand die /etc/conf/network von der Herta posten wo DSL funktioniert.
 
Ohne Gewähr - ich hatte ADSL nur mal ganz kurz ausprobiert
Code:
config interface loopback
        option  ifname          lo
        option  proto           static
        option  ipaddr          127.0.0.1
        option  netmask         255.0.0.0

config interface lan
        option  type            bridge
        option  ifname          eth0
        option  proto           static
        option  ipaddr          192.168.0.12
        option  netmask         255.255.255.0
        option  ip6addr         2001:8d8:81:c8c::12/64
#       option  nat             1
        option  dns             ""
        option  gateway         ""

### ADSL-Glump:

# Pseudo-Ethernetinterface für pppoe zum Provider für normalen Internetverkehr
# Die Dinger heißen immer nas[0-9]*.
# Ich nehme dafür als Namen 'nas8'; ist aber eigentlich egal

config atm-bridge
        option  atmdev          0
        option  unit            8
        option  vpi             1
        option  vci             32
        option  encaps          llc
        option  payload         bridged
        # 1. 'qos' noch nicht unterstuetzt durch OpenWrt
        # 2. Parameter sdu=1540 funktioniert nicht. Da stuerzt dann was ab.
        # 3. Und sowieso scheint der ATM-Modemtreiber QoS-Angaben zu ignorieren
        #option qos             ubr,aal5:sdu=1540


# Pseudo-Ethernetinterface 'nas9' für pppoe zum Provider für bevorzugten
# O2-VoIP-Verkehr. O2 blockt darauf aber alles, was nicht an seine VoIP-Server geht

config atm-bridge
        option  atmdev          0
        option  unit            9
        option  vpi             1
        option  vci             35
        option  encaps          llc
        option  payload         bridged
        #option qos             cbr,aal5:sdu=1540,min_pcr=400kbps

#  Interface ppp8 für normalen Internetverkehr
#  ppp8 deshalb, weil ich ppp0 etc. zum Experimentieren freihalten will

config interface dsldata                                # Interfacename ist beliebig
        option  proto           pppoe
        option  device          nas8
        option  ifname          ppp8
        option  unit            8
        option  username        [email protected]
        option  password        freeway
        option  peerdns         0                       # Wir haben unsere eigenen Nicht-O2-Nameserver
        option  defaultroute    1
        #option keepalive       5                       # No of connection failures before reconnect
        #option demand          300                     # Wenn undefiniert, haben wir Persist-Modus
        #option connect         "Connect-Script..."     # Z.B.Chat-Befehl
        #option disconnect      "Disconnect-Script..."
        #option ipv6            1
        #option pppd_options    "debug"                 # Ggf. mit "logread" ankucken


#  Interface ppp9 für O2-spezifischen VoIP-Verkehr

config interface dslvoice
        option  proto           pppoe
        option  device          nas9
        option  ifname          ppp9
        option  unit            9
        option  username        [email protected]
        option  password        freeway
        option  peerdns         0                         
        option  defaultroute    0                       # Keine Defaultroute darüber!

Das Masquerading muss noch eingerichtet werden. Wenn man das im OpenWrt-Stil konfigurieren will, gehört bei ppp8 wahrscheinlich noch "option nat 1" dazu.

Ich lasse bei mir aber stattdessen mein eigenes erprobtes Firewall/Masquerade-Setup-Shellscript ablaufen.
 
Zuletzt bearbeitet:
Du bist der Größte!

"option nat 1" ist bei mir am Lan interface definiert und es hat auch gestern funktioniert.

Jetzt muss ich nur noch den DHCP Server zum laufen bekommen und dann wäre ein Herta OpenWRT Port eigentlich fast fertig.
 
Du bist der Größte!
Danke, das rutscht runter. Die wesentliche Info stammt aber von hier. Ich hatte vor einiger Zeit schonmal rumexperimentiert mit einem ADSL-Modem am PC, welches man direkt auf der ATM-Schicht von Linux aus ansprechen konnte. Leider war das kein ADSL2+; sowas gibts zum Verrecken nicht für das hierzulande verwendete Annex B.

"option nat 1" ist bei mir am Lan interface definiert und es hat auch gestern funktioniert.Jetzt muss ich nur noch den DHCP Server zum laufen bekommen und dann wäre ein Herta OpenWRT Port eigentlich fast fertig.
Ja, wie OpenWrt das NAT konfiguriert, damit kenne ich mich nicht aus.

OpenWrt verwendet ja normalerweise dieses "Unified Configuration Interface". Das ist wohl sinnvoll, wenn man die Einstellungen via eingebautem Webserver konfigurierbar machen will.

Aber die Nachteile sind:
  • Das UCI ist ein zusätzlich zu erlernendes Layer, wenn man selbst am Eingemachten rumfeilen möchte. Es ist schlecht dokumentiert (etwas ist hier). Es macht die Konfigurierung komplexer und schwerer verständlich. Da werden beim Booten von ausgeklügelten Startup-Scripts die UCI-Konfigurationsdateien gelesen und interpretiert. Teilweise werden in der Ram-Disk dann Dateien im Format, wie man sie sonst in /etc findet, erzeugt.
  • Parameter, welche im UCI-System nicht vorgesehen sind, können auch nicht den davon betroffenen Programmen übergeben werden.
Bei Firewalling/Masquerading und dnsmasq hab ich deshalb auf UCI verzichtet und in /etc/rc.d und /etc/init.d meine eigenen Startskripte reingestellt.
 
Zuletzt bearbeitet:
Fallstrick: Instabiles Ethernet bei D-Link-Kernel

Verwendet man den Ethernet-Treiber ixp400_eth.ko von D-Link für seinen Horst, dann hat es da ein Problem mit der MAC-Adresse.

Der RedBoot setzt die MAC-Adresse auf das, was via fconfig konfiguriert worden ist. Der ixp400_eth-Treiber stellt allerdings beim Linux-Booten auf seine Standardadresse 00:02:b3:01:01:01 um.

Ein andere Rechner, der die fconfig-Adresse gelernt hat, kann kurzfristig nur dann wieder auf Horst zugreifen, wenn man mit dem arp-Kommando den Horst-Eintrag aus seinem Arp-Cache entfernt (arp -d * auf Windows-Rechnern).

Dies ist vielleicht ein Grund für manche Berichte, dass der Netzwerkzugriff auf Horst instabil ist.

Vorschlag zur Lösung für OpenWrt-Benutzer: In der /etc/config/network die MAC-Adresse nochmals explizit setzen, wie beispielsweise hier:

Code:
config interface lan
        option  ifname  ixp0
        option  macaddr 00:03:47:df:32:a8
        option  proto   static
        option  netmask 255.255.255.0
        option  dns     192.168.0.12
        option  gateway 192.168.0.12
        option  ipaddr  192.168.0.13
 
Moin,

Inzwischen läuft mit OpenWrt auf Herta (MIPS-Prozessor TI-AR7 im LSB/Little-Endian-Modus):
  • Ok: Flashspeicher
  • Ok: Serielle Konsole (0/3.3V-Pegel) mit umgebautem Handy/USB-Kabel.
  • Ok: Ethernet
  • Ok: Ethernet-Switch (braucht keine Treiber, außer wenn man seine Zusatzfeatures benutzen will; siehe Datenblatt)

Den Ethernet-Switch kannst Du leider nicht umkonfigurieren. Der Treiber, den D-Link benutzt und veröffentlich hat, nutzt die Management-Schnittstelle des Switches nicht. Die zuständige Entwicklungsabteilung in Taiwan sagt, die Schnittstelle wäre "not used", was leider zwei Dinge bedeuten kann: die Funktion ist im Treiber nicht implementiert oder die Leitungen sind auf dem Board gar nicht verbunden. Ohne aber zu wissen, welche GPIO-Leitungen der CPU benutzt werden, kann man leider auch mit dem Treiber nicht einfach mal probieren ...

[*]Nein: Leuchtdiodenansteuerung (ist wohl das GPIO-Gedöhns). Habs nicht untersucht.
Soweit ich weiß, sind alle LEDs (LAN, DSL, WLAN) direkt mit der jeweiligen Hardware verbunden. Von der CPU aus gibt's da also nicht viel zu steuern.

[*]Nein: Resettaster (der Taster auf Horst ist wohl tatsächlich an Herta ansgeschlossen). Habs nicht untersucht.
Der Reset-Taster auf Horst ist über die Brücke mit Hertas Reset-Taster verbunden.

Und auf Horst (ARM-Prozessor IXP425, MSB/Big-Endian-Modus):
  • Ok: Flashspeicher
  • Ok: Serielle Konsole (<-3/>+3V-Pegel) mit umgebautem PC-Seriellanschluss-Flachbandkabel.
  • Nein: Ethernet
  • Nein: ISDN. Habs noch nicht untersucht.
  • Nein: Telefonanschlüsse FXO und FXS. Habs nicht untersucht.
Für ISDN und die analogen Schnittstellen kannst Du die Treiber von D-Link benutzen. sie benutzen softwareseitig die normale Zaptel-Schnittstelle von Asterisk. Es gibt an den Treibern auch nicht so wahnsinnig viel zu verbessern, außer vielleicht dem IRQ-Verhalten auf den HFC-Chips und der DTMF-Erkennung auf dem FXO-Port.

[*]Nein: Leuchtdiodenansteuerung (ist wohl das GPIO-Gedöhns). Habs nicht untersucht.
Hier kannst Du auch die Treiber von D-Link benutzen. Die LEDs werden einfach über die GPIO-Schnittstelle des IXP-425 an- und ausgeschaltet.

Interessant noch: Der Flashspeicher von Horst ist ja angeblich 32MB groß. Er wird von RedBoot jedoch nur halb erkannt und angezeigt. Linux findet dort noch zwei weitere Partitionen. Der Kernel 2.6.16.9 von D-Link findet beim Booten noch eine Partition "spare1" (8MB) in mtd7 an und eine "spare2" in mtd8. Einen Openwrt-Kernel 2.6.26 hatte ich auch mal gebootet, der hatte, glaub ich, die beiden Teile zusammengefasst angezeigt.

Horst hat 32 MB Flash (je 16 MB auf zwei Chips). Es gibt noch eine Version der HorstBox Professional für Internetprovider, die nur zwei FXS-Schnittstellen und einen ISDN Master hat. Das Gerät hat nur 16 MB Flash. Da das ganze unter Zeitdruck parallel entwickelt wurde, könnte ich mir vorstellen, daß man (in manche Boxen?) den falschen Redboot installiert hat. Die Ethernet-Schnittstelle wird im werksseitigen Redboot ja auch falsch gemappt.

Gruß
Henning
 
Zuletzt bearbeitet:
Hallo zusammen

Gibts schon weitere Erfolgsmeldungen bezüglich openWRT auf Horst?

Träummodus an
Ich hoffe irgendwann meine Horsts ohne Hertas mit openWRT, völlig offen und Unterstützung für ISDN, Analog und USB betreiben zu können. Dann noch in ein schickes 19" Gehäuse mit gefrästen Öffnungen für die Ports einbauen und los geht der Spass ;-)
Träummodus aus

Schönes Wochenende!
 
Hallo,

OpenWRT läuft im Prinzip auf der Horst. Allerding ist bei mir noch kein Asterisk drin und die Installation ist auch noch nicht so einfach.
Sobald es was funktionierendes gibt, wirst du es hier erfahren.
Ich bin momentan noch an der Herta dran. Aber die Weinachtszeit ist auch noch da.

Du kannst dich gerne auch selbst mal an der Horstbox probieren. Ich denk mal, die Wichtigsten Infos sind hier zu finden.

Gruß
 
Hi!

Ich freue mich über diese Entwicklung.

OpenWrt nutzt doch Openembedded als Build-Umgebung, oder?

Einen Subversion- oder ein Git-Repository wäre jetzt praktisch. Ich könnte einen Subversion aufsetzten und ein Openembedded (Dev oder Stable) inklusive Bitbake einchecken.

Was den Zaphfc-Treiber angeht: ich hatte über Jahre einen modifizierten Zaphfc PCI am laufen, der bestand zum Teil aus dem Florz-Patch und zum Teil aus dem Orlandi-Patch.

Und letztenendlich könnte man diese Entwicklung auch in OpenEmbedded einfließen lassen.

Viele Grüße,
pnxs
 
Hallo zusammen

Gibt es bereits News was openWRT auf Horst betrifft?

Gruss
zanthos
 
Schließe mich an. Gibt es Neuigkeiten?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.