User Tools

Site Tools


projects:xnet:crosscompile

This is an old revision of the document!


Hintergrund

Im Jahr 2005 haben Ralf, DL5RB, Tobi, DG3THX, Thomas, DL9SAU und ich (Jann, DG8NGN) den Code von Xnet (http://swiss-artg.ch/xnet/beta) fuer die Plattform Mipsel (Linksys WRT54) angepasst und crosscompiliert. Ein kleiner Teil von Xnet ist in Assembler geschrieben und muss jeweils haendisch angepasst werden.

Die Aenderungen sind in den Code zurueckgeflossen, so dass Jimy (Autor von Xnet) die Aenderungen in seiner Uebersetzungsumgebung einbauen konnte und wir nicht jede neue Version selbst wieder uebersetzen mussten.

In den letzten Jahren wurde ich immer wieder nach Xnet fuer den Raspberry PI (http://www.raspberrypi.org) oder Mikrotik Metarouter mit OpenWRT (http://wiki.mikrotik.com/wiki/Manual:Metarouter) gefragt. Ich hatte immer abgewunken, da ich lange Zeit nicht den aktuellen Code von Xnet hatte. Vor einiger Zeit hat mir dann Jimy den aktuellen Code wieder zukommen lassen, so dass es nun Zeit wird Xnet fuer die genannten Plattformen zu uebersetzen.

Aktueller Stand

Zum Jahreswechsel hatte ich am Chaos Communication Congress (http://events.ccc.de/congress/2014/wiki/Main_Page) zusammen mit Thomas, DL9SAU, mal wieder die Gelegenheit unser altes Werk durchzuforsten und aufzuarbeiten.

Mittlerweile habe ich an DB0FHN eine neue virtuelle Maschine installiert und alles Notwendige bereitgestellt. Nun ist dieser Text entstanden, damit ich Mitstreiter fuer die Crosscompilesession finde und sie auf diese Seite leiten kann :D Nun, hier seid ihr ;)

Xnet VM

Verzeichnisse / Dateien

  • jann@xnet:~/openwrt$ (OpenWRT Code Anfang 2015 + Toolchain)
    • jann@xnet:~/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_uClibc-0.9.33.2/bin$ (Crosscompiler fuer Mipsel z.B. Linksys WRT54)
    • jann@xnet:~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin$ (Crosscompiler fuer Mips z.B. OpenWRT in Metarouter von Mikrotik RB433AH)
    • jann@xnet:~/openwrt/staging_dir/toolchain-arm_arm1176jzf-s+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin$ (Crosscompiler fuer ARM z.B. Raspberry PI)
  • jann@xnet:~/xnet$ (Alles zu Xnet)
    • jann@xnet:~/xnet/xnet-source$ (ZIP oder TAR.GZ Archive vom “Xnetcode 2005”, “Xnetcode 2005 modifiziert fuer WRT54/Mipsel” und “Xnetcode aktuell”)
    • jann@xnet:~/xnet/oldcode$ (“Xnetcode 2005” entpackt)
    • jann@xnet:~/xnet/oldcode-mipsel$ (“Xnetcode 2005 modifiziert fuer WRT54/Mipsel” entpackt)
    • jann@xnet:~/xnet/newcode$ (“Xnetcode aktuell” entpackt)
    • jann@xnet:~/xnet/compile$ (Hier gibt es Unterverzeichnisse zum “Basteln” mit dem Vornamen der “Bastler”, z.B. jann@xnet:~/xnet/compile/jann$)

Codevergleich

Die Aenderungen damals waren minimal. Ein Diff im Homeverzeichnis (jann@xnet:~$) zeigt dies auf:

diff -Naur xnet/oldcode/c/ xnet/oldcode-mipsel/xnet138-mipsel/c/ |grep^+|grep -v Last|less

Da es nicht zu 100% die gleiche Version ist, gibt es ein paar Differenzen, die nicht weiter betrachtet werden muessen. Die wichtigen Aenderungen finden wir hier:

  • appl/lib/prolib.c
  • appl/pc/system.c
  • appl/unix/ummips.S (zusaetzliche Datei von Ralf, DL5RB)
  • mylib/strlib.c ← bin mir nicht sicher, ob die Aenderung hier relevant ist (vermutlich nicht)

Uebersetzen des neuen Codes

jann@xnet:~/xnet/compile/jann$

unzip ../../xnet-source/newcode.zip
cd deliver
make -f ../makefile

Uebersetzen des alten Codes

Der alte Xnetsource compiliert nicht mehr sauber durch, da der GCC4 etwas penibler ist. Das ist fuer uns aber auch nicht notwendig, da wir nur am neuen Code interessiert sind. Einen Test hab ich trotzdem mal gemacht:

jann@xnet:~/xnet/compile/jann$

tar xvfz ../../xnet-source/oldcode-mipsel.tar.gz
cd xnet138-mipsel
vi  makefile.linuxmips <- CC =
/home/jann/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
make -f makefile.linuxmips

Er ist dann irgendwann ueber appl/mac/echodrv gestolpert.

Anpassung fuer Raspberry PI

Den Crosscompiler fuer Raspberry PI habe ich ueber OpenWRT Buildroot erstellen koennen. Dazu habe ich als Target System “Broadcom BCM2708/BCM2835” gewaehlt.

Jimy hat im neuen Code bereits Unterstuetzung fuer eine andere ARM-Plattform, den DLC7 (http://nt-g.de), integriert. Man merkt das sehr deutlich so:

jann@xnet:~/xnet/newcode$ grep -r ARM  *

Zwischen dem alten und dem neuen Code liegen nun knapp 10 Jahre. Ich kenne Jimys Konzept zum Uebersetzen der einzelnen Plattformen nicht… Ich weiss daher nicht, wie man am besten die Unterstuezung fuer den Raspberry PI einbaut.

Der GCC fuer die Plattform liegt hier

  • jann@xnet:~/openwrt/staging_dir/toolchain-arm_arm1176jzf-s+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin$

Ich selber habe keinen Raspberry PI, kann aber im HAMNET auf einen Raspberry PI zugreifen und ein Binary in /tmp ausprobieren. Xnet sollte am besten “statisch gelinkt” sein. Dann ist zwar das Binary groesser, aber

Bei Bedarf kann ich einen Raspberry PI fuer diesen Zweck zur Verfuegung stellen.

Anpassung fuer OpenWRT in Mikrotik Metarouter (z.B. RB433AH)

Den Crosscompiler fuer MIPS basierte Mikrotikgeraete habe ich ueber OpenWRT Buildroot erstellen koennen. Dazu habe ich als Target System “Atheros AR7xxx/AR9xxx” gewaehlt.

Der GCC fuer die Plattform liegt hier:

  • jann@xnet:~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin$

Ich habe einen OpenWRT-Metarouter mit dem Image von Mikrotik (http://wiki.mikrotik.com/wiki/Manual:Metarouter#Importing_image → MIPS Image) auf einem Mikrotik CRS125-24G-1S-2HnD gestartet. Funktioniert :)

Ich habe auch mal probiert das Image selber zu bauen (http://wiki.mikrotik.com/wiki/Manual:Metarouter#Building_your_own_OpenWRT_image), aber die Revision 29684 laesst sich mit einem aktuellen Debian/Stable nicht mehr compilieren. Fuer eine neuere Versionen von OpenWRT gibt es auch einen Userpatch (http://forum.mikrotik.com/viewtopic.php?f=15&t=75849#p403419), aber auch diese Revision laesst sich nicht mehr compilieren.

Ich erhoffte mir davon einen Crosscompiler von genau der OpenWRT-Version zu bauen, die auch als Metarouter dann eingesetzt wird. Ich denke aber, dass ein “statisch gelinktes” Binary (mit dem Crosscompiler von der aktuellen OpenWRT Version gebaut) auch auf einem alten OpenWRT noch laeuffaehig ist. Falls dies nicht der Fall ist, wuerde ich sogar nochmal ein altes Debian ausgraben und damit einen Uebersetzungsversuch starten…

Einen Metarouter mit OpenWRT kann ich bei Bedarf fuer diesen Zweck zur Verfuegung stellen.

Root

Falls Rootrechte auf der Xnet-VM notwendig sind, bitte Bescheidgeben.

Ausblick

Es wuerde mich freuen, wenn wir Xnet auf den beiden genannten Plattformen zum laufen bringen wuerden! Die Nachfrage scheint da zu sein. Das sagen mir die haeufigen Anfragen…

Vielen Dank fuers Mitwirken! 73, Jann

projects/xnet/crosscompile.1421013545.txt.gz · Last modified: 2015/01/11 22:59 by jann