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:
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.
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:~#