home
erste Version am 03.02.2014
letzte Änderung am 24.06.2014

Build-Umgebung für Ar71xx


Zwar gibt es zu diesem Thema reichlich Doku im Netz, speziell natürlich auch unter wiki.openwrt.org, aber leider findet man sehr oft hoffnungslos veraltete Dokus oder HowTos. Aus diesem Grund hat es mich fast ein ganzes Wochenende gekostet, ein HelloWorld.c für meinen Router zu übersetzten - bzw. die Voraussetzungen dafür zu schaffen.
Daher hier eine Anleitung, wie man in [maximal] einer Stunde eine Build-Umgebung für einen WR1043ND mit AA12.09 bauen kann.


VM erstellen


Ich lege mir für solche Dinge gerne erstmal eine virtuelle Maschine an, um meinen Hauptrechner "sauber" zu halten.
Installationsquelle ist: debian-7.1.0-i386-CD-1.iso
Die VM bekommt eine üppige Ausstattung:
2GB RAM, 2 CPUs, 40GB HDD


Innerhalb der Installation wird unter Softwareauswahl eingestellt:
    SSH server
    Standard-Systemwerkzeuge

Als Hostname habe ich openwrtbuild gewählt, der User heißt dede.

Nach Fertigstellung der VM wird dann aus einem Terminalfenster damit gearbeitet.
ssh openwrtbuild
Zunächst ein paar Grundeinstellungen für das OS als User root.
su
nano /etc/apt/sources.list    und auskommentieren von: deb cdrom:...
apt-get update
apt-get upgrade
apt-get install sudo
nano /etc/sudoers    und aufnehmen von: dede    ALL=(ALL) NOPASSWD: ALL
exit
sudo apt-get install ntp

ssh-Schlüssel vom Hauptrechner (heißt "c2q") holen:

mkdir .ssh
cd .ssh
scp c2q:~/.ssh/*.pub .
cat *.pub >authorized_keys
rm *.pub
cd

Standard-Alias aktivieren:
nano .bashrc    und Auskommentierung entfernen für: alias ll='ls -l' (ebenso bei den zwei folgenden Zeilen)

Abmelden, um das Anmelden ohne
Passwort zu testen:
exit

Wieder anmelden:

ssh openwrtbuild

Logon-Meldung kürzen:

sudo nano /etc/motd    und alle Zeilen löschen
sudo shutdown -h now

Das hat etwa 20 Minuten gedauert. Um das nicht wiederholen zu müssen, falls in den Folge-Schritten etwas schief laufen sollte, habe ich hier den ersten Snapshot gezogen. Danach wird die VM wieder eingeschaltet.


Build-Umgebung installieren


ssh openwrtbuild
    Referenz: http://wiki.openwrt.org/doc/howto/buildroot.exigence
sudo apt-get install subversion build-essential
sudo apt-get install git-core
sudo apt-get install libncurses5-dev zlib1g-dev gawk unzip
mkdir openwrt
cd openwrt

Nun wird das SDK auf das System kopiert.
Ich mache das mit scp, weil die Datei schon runtergeladen ist und im Download-Ordner unterhalb von OpenWRT liegt.

scp c2q:~/Downloads/OpenWRT/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2 .
Ansonsten gehts auch per wget:
wget
http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2

tar xjf OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2
mv OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2 sdk
rm Open*
cd
nano .profile     und Einfügen/Anhängen von:
PATH=$PATH:/home/dede/openwrt/sdk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/bin
STAGING_DIR=/home/dede/openwrt/sdk/staging_dir
CC=mips-openwrt-linux-uclibc-gcc
LD=mips-openwrt-linux-uclibc-ld
export STAGING_DIR
export CC
export LD

Für die finale Sicherung wieder:
sudo shutdown -h now


Danach wieder ein Snapshot ziehen und dann Einschalten der VM.


Erstellen des Testprogramms


ssh openwrtbuild
cd openwrt
mkdir src
cd src

Nun werden die zwei Dateien tst.c und Makefile erstellt.
Zuerst tst.c
#include <stdio.h>

void main()
  {
  printf("hallo dede\n");
  return();
}

Und dann noch das Makefile
tst: tst.o
    $(CC) $(LDFLAGS) tst.o -o tst
tst.o: tst.c
    $(CC) $(CFLAGS) -c tst.c
clean:
    rm *.o tst
Beim Makefile müssen die Einrückungen mit TAB vorgenommen werden - nicht mit Leerzeichen!

Nun wird übersetzt mit:
make

Danach das entstandene Programm auf den Router kopieren:
scp tst root@router:~


Testen


Zum Testen ein neues Terminal öffnen, mit dem Router verbinden und das neue Programm ausführen:
dede@c2q:~> ssh root@router


BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 ATTITUDE ADJUSTMENT (12.09, r36088)
 -----------------------------------------------------
root@OpenWrt:~# ./tst
hallo dede
root@OpenWrt:~#


QED