Das Infolexikon
...und Blog über die Uni FrankfurtInformatik und Kram
Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...
| Fonera Hacks |
Mir is bewusst, dass dieser Artikel für manche ein alter Schuh ist, aber da ich mich jetzt fast 4h durch irgendwelche wikis, howto's etc. wühlen musste, bringe ich mal alles auf den Punkt.
In diesem Artikel erfährt man, wieman den ssh-zugriff freischaltet die gpio-module installiert dafür sorgt, dass sie immer geladen werden buildroot einrichtet und Progs für die Fonera kompiliert
In diesem Artikel erfährt man, wie
Allgemeine Infos
Das Teil hat nen 183Mhz-Prozessor, 8Mb Flash, 16Mb RAM, 5 GPIO-Pins und eine serielle Schnittstelle. Als Betriebssystem kommt hier Open-Wrt zum Einsatz, allerdings von Fonera modifiziert (z.B. geht der client-mode der netzwerk-interfaces nicht). Ansonsten verhält sich das Betriebssystem wie ein herkömmliches Linux.Out of the box
Nicht mit dem i-net verbinden! Sonst könnte es sein, dass neue firmware aufgespielt wird, das wollen wir nicht! Einfach mal den Ethernetport offen lassen, und sich per WLAN auf "MyPlace" verbinden (der WPA-Key ist aufm Aufkleber, S/N).Jetzt solltet ihr auf der Startseite eures Foneras landen. Dort könnt ihr unter "Status" kucken, welche Firmware denn drauf ist. Glück haben Besitzer der Firmware-Versionen 0.7.0r4 bis 0.7.1r1, die können nämlich ganz easy per html-injection den ssh-zugang aktivieren:http://k0k0.k1k2.de/ssh/open-ssh-access-to-fonera.htmDenkt auch daran, die config-Dateien zu ändern, sonst wird die firmware doch ge-updated, sobald ihr die fonera mit dem i-net verbindet!
Alle anderen sollten sich mal die Seite http://stefans.datenbruch.de/lafonera/ ankucken, dort werden auch andere Methoden beschrieben.
SSH
Jetzt kann man sich mitssh root@192.168.10.1
Nachdem wir nun SSH-Zugriff haben, können wir erstmal die Startseite ein bisschen umgestalten, sie liegt in /var/www. Have fun!
GPIO
Das Fonera-Teil verfügt über einige GPIO-Pins (General Purpose Input Output), die wollen wir natürlich auch benutzen! Dafür einfach mal bei http://fghhgh.150m.com/ das Modul "kernel module 2.4 ipkg package" auf den PC ziehen (hab mittlerweile auch auf den 2.6.21-5 Kernel geupdatet. Die kmod-gpio-packages dazu findet man hier: http://fon.testbox.dk/packages/2.6.21.5/). Anschliessend mitscp kmod-gpio_2.4.33.4-ar531x-1_mips.ipk root@192.168.10.1:/jffs
Jetzt wieder mit SSH drauf connecten, und das Modul mit
root@OpenWrt:~# ipkg install /jffs/kmod-gpio_2.4.33.4-ar531x-1_mips.ipk
Für einen ersten Funktionstest das Modul laden:
root@OpenWrt:~# insmod /lib/modules/2.4.33.4/proc_gpio.o
Man kann jetzt mal kurz die WLAN-LED ausschalten:
root@OpenWrt:~# echo "0" > /proc/gpio/2_out
#!/bin/sh #Copyright (C) 2006 OpenWrt.org insmod /lib/modules/2.4.33.4/proc_gpio.o
Löten!
Jetzt will man natürlich die Pins nach aussen führen. Dazu erstmal das Gehäuse aufschrauben. Es gibt nur zwei Schrauben, die befinden sich unter den vorderen Gummi-Füßen. Einfach aufschrauben, dann kann man den Gehäuse-Deckel abnehmen! Und hier jetzt nochmal grob die Pin-Locations ->Leider sind die GPIO-Pins nicht im Standard-Raster-Maß angeordnet,die Lötstellen liegen etwas enger. Ich werd mir morgen mal ne "kleine" Stiftleise besorgen, das ganze sauber löten und nach aussen führen, soll ja schliesslich bald meinen Robo fernsteuern! Das hier ist die serielle Schnittstelle der Fonera, ich hab die Pins mal für euch beschriftet. Hier greife ich übrigens auch GND ab. Und hier dann noch die Belegung der GPIO-Pins. Für die Messungen und Tests habe ich überall an SW1 Kabel angelötet, aber es stellte sich heraus, dass man mit dem GPIO-Modul nur vier davon schalten kann, nämlich 1,2,5,6.
Code compilen
Da auf der Fonera kein compiler vorhanden ist, müssen wir die Programme dafür auf dem PC compilen und dann rüberkopieren. Daher müssen wir uns eine build-Umgebung einrichten, mit der wir cross-compilen können, so dass die compilierten Progs auf der Fonera laufen.Im folgenden gibt es zwei Abschnitte, der erste funktioniert für originale Fonera-Kernel, da muss man also nur irgendwie die Programme draufschieben und sie laufen.
Der zweite Abschnitt ist dann für OpenWrt-Kernel.
Buildroot einrichten und compilen (original-Fonera)
Das hier hat den Vorteil, dass man keinen neuen Kernel auf die Fonera flashen muss, man kann einfache Programme direkt gegen den bereits existierenden Kernel kompilieren!Hier die Anleitung fürs Einrichten eines buildroots (funktioniert nur für Fonera!):
Folgende Pakete werden für unser Vorhaben benötigt:
gcc, binutils, patch, bzip2, flex, bison, make, gettext, pkg-config, unzip, libz-dev und die libc-header
$> mkdir /wherever/fonera-src/ $> cd /wherever/fonera-src/ $> wget http://download.fon.com/firmware/fonera/latest/fonera.tar.bz2 $> tar jxvf fonera.tar.bz2
$> make V=99 config
Und jetzt kompilieren, nehmt euch nen Kaffee, raucht ein paar, bei mir hats ca. 45 Minuten gedauert:
$> make V=99
Kompilieren und kopieren!
So, jetzt kanns endlich losgehn. Wir legen mal folgendes Testprogramm als test.c an:
/* test.c - Test my buildroot for Fonera */
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Yeahah, mein binary läuft!\n");
}
$> PATH=$PATH:/wherever/fonera-src/staging_dir_mips/bin $> export PATH $> mips-linux-uclibc-gcc test.c -o test
$> scp ./test root@192.168.10.1:/tmp/
$> ssh root@192.168.10.1 root@OpenWrt:~# cd /tmp root@OpenWrt:~# ./test Yeahah, mein binary läuft!
UPDATE 19.10.2008: C-Server, Video
Mittlerweile hab ich mal mit der buildroot und nem c++-Programm einen server auf der fonera und nen client auf meinem laptop gebaut. Jetzt kann ich auf dem Lappy Tasten drücken, und die GPIO-Pins der Fonera werden in realtime getoggelt:Buildroot einrichten und compilen (OpenWrt Kamikaze)
OpenWrt kann dann aber doch mehr als der "beschnittene" Fonera-Kernel, und bietet einem somit viel mehr Freiheiten und Möglichkeiten, deshalb hier noch die Beschreibung, wie man sich selbst einen OpenWrt-Kernel kompiliert und gleichzeitig eine buildroot erstellt, um für diesen Kernel dann Programme zu erstellen und zu benutzen.Ich brauch jetzt unbedingt den I2C-Bus, da der Router ja als Server auf meinem Robo fungieren soll, deshalb bau ich mir jetzt doch nochmal nen kompletten kernel mit den i2c-modulen neu, nach folgenden Anleitungen: Buildroot für OpenWrt und zum flashen: Open-Wrt auf der Fonera:
svn co https://svn.openwrt.org/openwrt/branches/8.09/
Dran denken, bei 'make menuconfig' dann unter Utilities die i2c-utils auszuwählen!
Jetzt noch die Architektur einstellen, für die man compilen will, bei der Fonera ist es Atheros AR2315:
make menuconfig
make V=99
Flash
ACHTUNG!! Das hier funktioniert nur, wenn man bereits open-wrt auf der kiste hat! Aus dem jungfräulichen Fonera-Kernel raus geht das net! Da muss man dann seriell flashen!So, wieder da! Ich hab diesmal im laufenden Betrieb geflasht (per ssh eingeloggt):cd /tmp scp host:/path/to/openwrt-atheros-vmlinux.lzma . scp host:/path/to/openwrt-atheros-root.jffs2-64k . mtd -e vmlinux.bin.l7 write openwrt-atheros-vmlinux.lzma vmlinux.bin.l7 mtd -e rootfs write openwrt-atheros-root.jffs2-64k rootfs reboot
WiFi Clientmode
Hat super funktioniert! Nach dem reboot sind natürlich erstmal alle Netzwerk-Einstellungen weg, deshalb (mehr für mich als für euch) nochmal die Schritte, um Fonera in den client-mode zu versetzen und im wlan anzumelden (hier natürlich seriell verbinden, ACHTUNG: machnmal bootet die Fonera nicht mit angestecktem seriellen Kabel. Also, Kabel ab, einschalten, ca. 5sek. warten, Kabel wieder dran, minicom verbinden und Enter drücken, das aktiviert die Konsole!):
config interface lan
option ifname wifi0
option proto dhcp
option netmask 255.255.255.0
config wifi-device wifi0
option type atheros
option channel auto
config wifi-iface
option device wifi0
option network lan
option mode sta
option proto dhcp
option ssid skynet
option encryption "wep"
option key "s:DEIN_KEY_IN_ASCII"
I²C
Beim booten kommt immer noch ein fehler, dass die Module nicht geladen werden konnten, aber es funktioniert endlich!!!
root@Open-Wrt:/# insmod /lib/modules/2.6.26.8/i2c-gpio-custom.ko bus3=0,1,3
root@Open-Wrt:/# insmod /lib/modules/2.6.26.8/i2c-gpio.ko
root@Open-Wrt:/# i2cdetect -l
i2c-0 i2c i2c-gpio0 I2C adapter
root@OpenWrt:/lib/modules/2.6.26.8# i2cdetect -a 0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0.
I will probe address range 0x00-0x7f.
Continue? [Y/n] Y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
root@Open-Wrt:/#dmesg ... Custom GPIO-based I2C driver version 0.1.1 i2c-gpio i2c-gpio.0: using pins 1 (SDA) and 3 (SCL)
| Erstellt | 16. Oktober 2008 22:11:25 | Geändert | 10. Januar 2009 14:35:37 |
|---|---|---|---|
| Von | Tobias Weis | Kategorien | Technik Linux Hardware Robostuff |
| 4 Kommentar(e) | |||
Kommentare
was hat das V=99 auf sich? erfüllt das irgend ne relevante funktion? :)
ich konnte sie auch weglassen, beim Tobi hat es aber wohl geholfen, der hatte vorher probleme.
Hat wohl was mit dem Verboselevel zu tun. Probiers mal ohne, gehts dann nicht, einfach mal anhängen. kann nie schaden :D
Hat wohl was mit dem Verboselevel zu tun. Probiers mal ohne, gehts dann nicht, einfach mal anhängen. kann nie schaden :D
Welche Architektur muss ich auswählen?
Atheros 231x/5312 oder Atheros AR71xx?
schon mal danke im voraus.
mfg Gerrit
Atheros 231x/5312 oder Atheros AR71xx?
schon mal danke im voraus.
mfg Gerrit
auf jeden Fall Atheros231x/5312 für die fonera!




