[Berlin-wireless] iin firmware mit kamikaze selber bauen howto

ulf kypke u.kypke
Fr Feb 12 23:31:33 CET 2010


hallo liebe freifunker,
da immer mehr leute nach neuer hardware, dem neuen kamikaze und der
tollen luci web oberfläche fragen, gebe ich hier eine kurze anleitung
wie man das auch ohne große linux super spezi erfahrungen
bewerkstelligen kann.
diese anleitung ist einfach gehalten und für diejenigen gedacht, die
schonmal davon gehört haben, und nur noch  nicht ganz wussten wie das
geht und  was man genau in die konsole "tippen" muss.
die spezis unter uns können das natürlich auch mal lesen, vielleicht
hat sich bei mir ja ein fehler eingeschlichen, oder die einen oder
anderen kennen noch ein paar tricks.

mit der gefahr, dass sich jetzt viele ihre router schrotten, sich ihre
windows partiitonen erschießen oder auch nur viele neue fragen stellen
- macht nix und los gehts.

also, man braucht natuerlich ein linux grundsystem auf einem halbwegs
schnellen computer und internet.
dazu kann man sich entweder ein ubtuntu auf einer vorhandenen windows
platte installieren oder mit vmware ein linux in einer vm
installieren.
die vmware variante ist sicher nicht die schnellste, aber vielleicht
am einfachsten.
ein fertiges image für vmware gibts z.b. hier:
http://www.thoughtpolice.co.uk/vmware/

hat man ein fertiges linux braucht man erstmal ein paar tools im
grundsystem damit man überhaupt die sourcen für die toolchain des
openwrt builds übersetzten kann.

alles wird ab jetzt in der konsole gemacht und los gehst:

so nun installiert man die wichtigesten tools zum bauen und vieleicht
auch noch ein paar dinge zum späteren flashen mit nützlichen netzwerk
tools als root mit dem klassischen debian installer tool  "apt get"

als root:
apt-get install subversion build-essential binutils flex bison
autoconf gettext texinfo sharutils subversion libncurses5-dev
ncurses-term zlib1g-dev rsync gawk unzip screen mc rsync tcpdump
net-tools tftpd

oder als user mit sudo
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$  sudo apt-get install
subversion build-essential binutils flex bison autoconf gettext
texinfo sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
rsync gawk unzip screen mc rsync tcpdump net-tools tftpd


nun werden viele zusätzliche tools installiert, also mit yes oder ja
bestätigen das in abhängigkeit noch mehr installiert wird.

jetzt wird der openwrt source mittels subversion geholt.
(nbd meinte vor ein paar wochen der trunk ist sehr stabil geworden,
man kann sich also trauen, gleich die aktuellste entwicklungsversion
zu nehmen)
hierfür sollte man sich im homeverzeichnis vielleicht ein ordner names
openwrt machen, darein wechseln und dann den source "auschecken" das
macht man mit:

user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ mkdir openwrt
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ cd openwrt
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ svn co
svn://svn.openwrt.org/openwrt/trunk

nun dauert es wieder ein wenig, bis alle dateien da sind.
nach dem auschecken gibt es ein verzeichnis namens trunk, darein wird
gewechselt und man kann mit der konfiguration der firmware beginnen.

user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ cd trunk
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ make menuconfig

nun startet eine sog. ncurses oberfläche in blau und als erstes wählt
man sein target aus. damit ist primär die cup plattform gemeint,
die openwrt entwickler haben das sehr übersichtlich gehalten, manchmal
muss man aber wissen welche cpu in dem gerät für das man ein firmware
baut wissen.

hier eine kleine liste der wichtigesten plattformen:

Foneras und andere ätlere atheros systeme = Atheros AR231x/AR5312
Neuere atheros systeme wie z.b. der tplink = Atheros AR71xx/AR7240/AR913x
kernel version 2.6 asus wl500 und andere broadcom system ohne broadcom
wlan = Broadcom BCM947xx/953xx
kernel version 2.4 wrt54gl und wl500 mit broadcom wlan Broadcom =
BCM947xx/953xx  [2.4]
meshcube = RMI/AMD AU1x00
fritzboxen der älteren generation = TI AR7
und x86 basierte system wie soekris, wrap board alix board etc. = x86

sicher gibs noch viele andere, also einfach mal durchscrollen.

je nach plattform auswahl gibt es unterkategorien für das target
profil. also z.b.  bei BCM947xx/953xx die einzelnen wrt versionen oder
bei x86 die jeweiligen alix, wrap etc boards.

hier noch grunsätzliches zur verwendung dieser oberfläche:
zur auswahl der kategorien drückt man die enter taste, zur auswahl der
unterkategorieren bzw. späteren packete die leertaste.
sternchen bedeutet im firmware direkt mit drin, ein m bedeutet modul,
d.h. es wird mit übersetzt und ein ipk paket erstellt aber nicht
automatisch in die firmware datei eingepackt. zu auswählen auf select
klicken und man wechselt zurück mit exit und speichert mit dem letzten
exit automatisch.

so also wir wählen das target und profile aus, für eine neue ubiquiti
routerstation beispielsweise wäre das sowas:

Target System (Atheros AR71xx/AR7240/AR913x)  --->
Target Profile (Ubiquiti RouterStation)  --->

für diejenigen, die vieleicht später mehrere images bauen wollen,
sollten einen zentralen download ordner anlegen. dieser kann auf der
gleichen ebene sein wie die einzelnen builds, dann erstellt man im
openwrt verzeichnis den ordner dl und sagt in der konfiguration unter
[*] Advanced configuration options (for developers)  --->
(/home/user/operwrt/dl) Download folder

so nun gehts los mit dem kompilieren, also exit auswählen enter
eingeben yes für Do you wish to save your new OpenWrt configuration?
mit enter bestätigen.
danach ein einfaches make sagen

user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ make

für diejenigen die einen dual oder quadcore system haben kann man mit
der zusatz option -j 2 oder -j 4 die parallel startenen kompilier
prozesse festlegen, das geht dann deutlich schneller, also bei einem
8core super system wäre das dann

user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ make -j 8

nun werden viele sourcen aus dem internet geholt, das kann mit weilen
etwas länger dauern, wenn alles fertig kompiliert bekommt man wieder
die konsole und kann jetzt die zusätzlichen pakete wie z.b. luci dazu
kompilieren.
dazu braucht es aber ein paar kleine schritte:
mit der datei feeds.conf werden die quellen für die zusätzlichen
pakete definiert, es gibt schon eine default einstellung, diese wird
kopiert mit:
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ cp feeds.conf.default
feeds.conf

danach wird der source der pakete geholt mit:
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ scripts/feeds update

hiermit werden die pakete in das build integriert
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ make package/symlinks

nun wieder das konfigurations tool starten und die passenden pakete auswählen
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ make menuconfig

es gibt mittlerweile zig hunderte von paketen, vielleicht auch noch
mehr, es dauter viel zeit sich alle anzusehen, daher gibt es sog. meta
pakete, und somit auch eins für freifunk. dieses findet man unter dem
punkt LuCI -> Freifunk. Dieses muss mit "y" ausgewählt werden und
damit wird in abhängigkeit auch pakete wie olsr und viele andere mit
ausgewählt.
das sollte dann so aussehen
<*> luci-freifunk-community.................. Freifunk Community Meta-Package

per hand kann man nun noch ein paar andere auswählen, wie z.b tcpdump
net-tools screen, mtr, und so weiter, was das herz eben begehrt.

nach abschluss der selektion wieder mit exit aus dem konfigurations
tool und wieder den kompilier prozess mit
user at Debian-50-lenny-64-minimal:~/openwrt/trunk$ make

starten. eigentlich war es das schon, unter dem verzeichnis bin/
liegen die firmware images und darin unter packages die ipkg pakete.
- fertig...

wenn man tatsächlich probleme hat und der komilierprozess abbricht
dann muss man mit make V=99 nachsehen was los ist.
ein make clean bzw. make distclean macht das build  wieder sauber und
man kann es für eine andere plattform neu verwenden.
ich persönlich checke für jede plattform ein eigenens svn repository
aus, das ich je nach hardware spezifisch benenne, das geht dann mit
dem befehl svn co svn://svn.openwrt.org/openwrt/trunk ordnername und
wenn man eine besondere revisionsnummer will geht das mit svn co
svn://svn.openwrt.org/openwrt/trunk --revision 12345 ordnername

vielleicht habe ich am wochenende noch ein wenig zeit und beim
naechsten bauen mach ich screenshots und pack das alles ins freifunk
wiki.
also traut euch, man kann nicht viel kaputt machen, viel spass nun
beim selber firmware bauen

so long

ulf





Mehr Informationen über die Mailingliste Berlin