Gumstix-FAQ
Aus Labor für Echtzeitsysteme
Inhaltsverzeichnis |
Offene Fragestellungen
- USBNET funktioniert nicht! (Problem von Gumstix confirmed)
- Gibt es vorgefertigte Images für Kernel und Filesystem des Verdex-Boards? Wahrscheinlich nicht.
- Wieso gibt es nach einem "make" mehrere Pfade für Kernel-Module? (/lib/modules/2.6.21-gum und /lib/modules/2.6.21-rt1-gum)
Allgemeines
Das gelieferte Verdex-Board ist mit der folgenden Revision geliefert worden:
# cat /etc/gumstix-release DISTRIB_ID='gumstix' DISTRIB_DESCRIPTION='' DISTRIB_RELEASE='1321' DISTRIB_CODENAME='' BUILD_DATE='Thu Mar 1 17:11:07 PST 2007' BUILD_HOSTNAME='azazel.hughes-family.org' #
Das Bluetooth-Modul scheint vom Typ
Infineon PBA 31308/IES4
zu sein.
Inbetriebnahme
Hardware
- console-vx eventuell mit zwei Kabeln (Plus/Minus) für die Stromversorgung ausrüsten. Das ist allerdings nicht unbedingt notwendig, weil sich das Board auch per USB mit Strom versorgen lässt.
- 3 Kabel an eine 9-polige SUB-D Buchse anlöten (Pin 2, 3 und 5). Die Kabel sollten einen solchen Querschnitt haben, dass sie sich in die vorhandene runde Buchse auf das Board console-vx stecken lassen (mittlere Buchse).
- Motherboard und Konsolenboard zusammenstecken.
Software
- Am einfachsten ist es, eine Datei .kermrc mit folgendem Inhalt anlegen:
set line /dev/ttyUSB0 set speed 115200 set reliable fast set carrier-watch off set flow-control none set prefixing all set file type bin set rec pack 4096 set send pack 4096 set window 5 set transfer protocol zmodem {rz} {rz} {sz -w 10000 %s} {sz -w 10000 - a %s} {rz} {rz}
Die letzte Zeile ist notwendig (und steht nicht im Gumstix-Wiki), damit sich per ZModem auch bei Einsatz eines USB-Seriell-Konverters Dateien transferieren lassen. Eventuell müssen Sie /dev/ttyUSB0 gegen /dev/ttyUSB1 austauschen.
Sollen Daten per Bootloader u-boot übertragen werden, muss die letzte Zeile set transfer... weggelassen werden. Stattdessen sollte das Kommando robust verwendet werden.
- Starten Sie auf dem Host System C-Kermit.
kermit
- Verbinden Sie sich mit dem Target (Gumstix) durch Eingabe von connect. Danach sollten die Ausgaben des Gumstix auf dem Host erscheinen.
quade@ezs-mobil:~$ kermit C-Kermit 8.0.211, 10 Apr 2004, for Linux Copyright (C) 1985, 2004, Trustees of Columbia University in the City of New York. Type ? or HELP for help. (/home/quade/) C-Kermit>connect Connecting to /dev/ttyUSB0, speed 115200 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options. ---------------------------------------------------- Welcome to the Gumstix Linux Distribution! gumstix login: root Password: gumstix Welcome to Gumstix! By default, this gumstix is configured for CF support. Unfortunately, this means MMC support has been disabled out of the box. To turn on MMC and turn off CF, edit the file /etc/modules and comment out or delete the pcmcia (CF) line, and uncomment the MMC lines. You then also need to comment out or remove the line "auto mwlan0" in /etc/network/interfaces if it exists, since it will otherwise cause the pcmcia driver to be loaded. #
- Loggen Sie sich auf dem Gumstix mit dem Loginnamen root und dem Passwort gumstix ein.
- Um wieder zum Kermit-Prompt zu kommen, geben Sie <CTRL>\c (Control-Backslash C) ein.
- Um Kermit zu beenden geben Sie beim Kermit-Prompt exit ein.
Datentransfer über die serielle Schnittstelle (Linux)
- Daten lassen sich über das ZModem-Protokoll zwischen Host und Target tranferieren. Dazu muss auf dem Hostsystem das Paket lrzsz installiert sein.
apt-get install lrzsz
- Um Daten vom Host auf den Target zu übertragen, verbinden Sie sich auf dem Target mit Hilfe von Kermit und starten dann (im richtigen Verzeichnis) rz.
- Kehren Sie per Controll-Sequenz (Control-Backslash C) auf den Kermit-Prompt zurück und verschicken Sie die Datei mit Hilfe des Kommandos send.
# cd /tmp/ # rz �z waiting to receive.**▒B0100000023be50 (Back at ezs-mobil) ---------------------------------------------------- (/home/quade/) C-Kermit>send /tmp/hello Sende: hello Bytes gesendet: 5068 BPS:9087 Übertragung abgeschlossen (/home/quade/) C-Kermit>connect Connecting to /dev/ttyUSB0, speed 115200 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options. ---------------------------------------------------- #
- Um Daten vom Target auf den Host zu übertragen, müssen Sie auf dem Target nur das Kommando sz <Dateiname> eingeben.
# # sz messages **▒B0▒▒▒ ---------------------------------------------------- Empfange: messages Bytes empfangen: 11914/ 11914 BPS:11321 Übertragung abgeschlossen ---------------------------------------------------- �00000000000 #
Datentransfer über die serielle Schnittstelle (u-boot)
...
Bluetooth
Bluetooth funktioniert ohne Hardware-Manipulation nicht zusammen mit dem Board console-vx. In Zusammenhang mit dem breakout-vx gibt es keine Probleme.
Der eigentliche Bluetooth-Controller ist per seriellem Interface angebunden und wird damit über den in der CPU eingebauten BTUART bedient. Dieser UART wird über die GPIOs 42 (Receive), 43 (Transmit), 44 (CTS) und 45 (RTS) gesteuert. Der UART respektive der Controller benötigt einen Takt von 32kHz. Die GPIOs müssen für den Bluetooth-Betrieb konfiguriert sein (42: in AF1, 43: out AF2, 44: in AF1, 45: out AF2).
Das Suchen des über den seriell angeschlossenen BT-Controllers wird durch das Programm hci_attach realisiert. Dieses bekommt die zuständige serielle Schnittstelle und den Controllertyp mitgeteilt:# hciattach /dev/ttyS1 gumstix
Vermutlich ist der Controllertyp gumstix; hciattach -l gibt eine Liste der unterstützten Controllertypen aus.
Bluetooth ist im Auslieferzustand bereits aktiviert. Ansonsten ist Bluetooth über init zu aktivieren:
# /etc/init.d/S30bluetooth start
Personal Area Network (PAN) via Bluetooth (WPAN) einrichten
Eine Alternative zu der seriellen Schnittstelle ist die Verbindung via Bluetooth mittels TCP/IP-Protokoll. Wahlweise ist der Gumstix oder ein Host als Server zu wählen. Der Server dient als Access Point (NAP).
+---------+ | NAP | +---------+ / | \ / | \ / | \ / | \ / | \ / | \ +------+ +------+ +------+ | PANU | | PANU | | PANU | +------+ +------+ +------+
Als erstes ist auf allen beteiligten Systemen das Modul bnep zu landen:
# modprobe bnep
Der Pan-Daemon wird auf dem Server mit folgendem Kommando aktiviert:
# pand --listen --role NAP --master --autozap
und auf den Clients mit:
# pand --role PANU --search --persist
Bei erfolgreicher Verbindung wird mittels ifconfig -a das Interface bnep0 angezeigt und wie ein normales Ethernet Interface konfiguriert.
# ifconfig -a bnep0 Link encap:Ethernet HWaddr 00:06:C6:C4:08:27 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:4 (4.0 b) TX bytes:0 (0.0 b) # ifconfig bnep0 192.168.1.1
Ist bnep0 in der Auflistung nicht vorhanden, reicht es evtl. aus, auf dem Server mittels hcitool einen Scan durchzuführen:
# hcitool scan
Nun ist eine Verbindung per SSH auf dem Gumstix möglich:
# ssh 192.168.1.1
USB-Net
USBNET SCHEINT ZUR ZEIT VOM VERDEX-BOARD NICHT UNTERSTÜTZT ZU WERDEN!!!
So würde es aber aller Voraussicht nach gehen:
- Per usbnet lassen sich mit tcp/ip Daten über USB austauschen. Dazu muss das Target eine USB-Client Schnittstelle (wie auf dem Board console-vx) verfügen. Auf dem Client kann die Schnittstelle per serieller Konsole direkt konfiguriert werden. Der notwendige usbnet-Treiber ist im mitgelieferten Kernel fest eincompiliert.
# ifconfig usb0 192.168.1.1
- Auf dem Hostsystem müssen die Treiber usbnet und cdc-subnet geladen sein:
root@ezs-mobil# modprobe usbnet root@ezs-mobil# modprobe cdc-subnet
- Danach sollte die Konfiguration der usb-Schnittstelle möglich sein:
root@ezs-mobil# ifconfig usb0 192.168.1.2
- Jetzt sollte die Verbindung zwischen den beiden Rechner stehen...
USB-WLAN
Nach den gegenwärtigen Recherchen wird am besten ein USB-Wlan-Adapter mit einem RALINK-Chipsatz unterstützt. Daher haben wir jetzt einen D-Link DWL-G122 bestellt.
Hier Links zur Einrichtung:
- Anleitung für Ubuntu
- Anleitung für Ubuntu (2. Version)
- Anleitung für Gentoo
- Open-Source Treiber auf serialmonkey
- Erfahrungsbericht
TBD.
Emulator
Für den Gumstix gibt es hier Informationen zur Emulation http://www.bitmux.org/qemu.html.
user@host> cd qemu./configure --target-list=arm-softmmu --host-cc=gcc-3.4 --cc=gcc-3.4\ --disable-gcc-check --disable-gfx-check ... user@host> ./arm-softmmu/qemu-system-arm -M gumstix -hda ../flash -nographic
flash ist das mitgelieferte Gumstix-Image. Ein eigenes Image konnte noch nicht zur Mitarbeit überredet werden.
Entwicklungsumgebung einspielen
Die Entwicklungsumgebung beruht auf buildroot. Die notwendigen Quell- und Generierungsdateien befinden sich auf dem Subversion-Server von Gumstix. Für das Einspielen der Entwicklungsumgebung ist ein Internetzugang notwendig.
Für die verschiedenen Gumstix-Boards gibt es auch verschiedene Entwicklungsumgebungen. Der im Wiki typischerweise angegebene Pfad scheint ist für das Basix- und das Connex-Board. Für das Verdex-Board werden mit dem folgenden Kommando die relevanten Dateien ausgecheckt:
svn co http://svn.gumstix.com/gumstix-buildroot/branches/users/craig/270 gumstix-buildroot
Damit liegt die aktuelle Version im Unterordner gumstix-buildroot vor. Zur Generierung müssen eine Reihe von Paketen auf dem Hostsystem vorhanden sein.
apt-get install autoconf # Liste muss ergänzt werden!!!
Um eine andere Version der Entwicklungsumgebung einzuspielen, wird beim co-Kommando die Releasenummer mit angegeben:
svn co -r1321 http://svn.gumstix.com/gumstix-buildroot/branches/users/craig/270 gumstix-buildroot
Ein neues Root-Filesystem und einen neuen Kernel für den Gumstix generieren
quade@ezs-mobil:/bin$ ls -l sh lrwxrwxrwx 1 root root 4 2007-04-20 14:05 sh -> dash quade@ezs-mobil:/bin$ sudo su - Password: root@ezs-mobil:~# cd /bin root@ezs-mobil:/bin# rm sh root@ezs-mobil:/bin# ln -s /bin/bash sh root@ezs-mobil:/bin# ls -l sh lrwxrwxrwx 1 root root 9 2007-05-25 18:46 sh -> /bin/bash root@ezs-mobil:/bin#
Sind die Datein heruntergeladen, wird per
quade@ezs-mobil:~/gumstix/gumstix-buildroot$ make defconfig ... quade@ezs-mobil:~/gumstix/gumstix-buildroot$ make ...
der Generierungsprozess angestossen. Dabei werden die aktuellen Pakete (z.B. der Linux-Kernel) von den entsprechenden Servern (z.B. http://www.kernel.org)
Nach der Generierung finden sich im aktuellen Verzeichnis drei Dateien:
uImage | Kernel |
rootfs.arm_nofpu.jffs2 | Root-Filesystem |
u-boot.bin | Bootloader (muss typischerweise nicht neu geflasht werden) |
Generierten Kernel testen
Zunächst wird der generierte Kernel umbenannt:
quade@ezs-mobil> cp gumstix-buildroot/build_arm_nofpu/root/boot/uImage /tmp/kernel2.6.18gum
Danach wird der Kernel z.B. per Kermit auf den Gumstix (Target) geladen:
gumstix# cd /boot gumstix# rz ... <per ctrl-\c auf Kermit zurückschalten> c-kermit> send /tmp/kernel2.6.18gum ...
Nach dem Laden wird der Gumstix neu gebootet, dabei direkt in den Bootloader gehen (also Bootvorgang unterbrechen), den neuen Kernel aus dem Filesystem in den Speicher laden und den Bootvorgang fortsetzen:
... GUM> fsload a2000000 /boot/kernel2.6.18gum GUM> bootm a2000000 ...
Programme für den Gumstix erzeugen
Makefile:
CC=../gumstix-buildroot/build_arm_nofpu/staging_dir/bin/arm-linux-gcc all: hello clean: rm -f hello *.o
Quelltext (hello.c):
#include <stdio.h> int main( int argc, char **argv ) { printf("hello world\n"); return 0; }
Der Quelltext hello.c befindet sich in einem (eigenen) Verzeichnis unterhalb des Buildroot-Verzeichnisses. Durch Aufruf von make wird das Programm hello generiert, das dann auf den Gumstix geladen und dort getestet werden kann.
Bezüglich besonderer Bibliotheksfunktionen kann es natürlich noch Schwierigkeiten geben...
Treiber für den Gumstix generieren
Beispielcode (Quellcode plus Makefile) findet sich unter http://docwiki.gumstix.org/Kernel_hello_world
Gumstix flashen
In neueren Versionen der Buildroot-Software wird der Kernel getrennt vom Root-Filesystem erzeugt, gehalten und letztlich auch geflasht. Auf unserem Gumstix befindet sich noch u-boot-Version 1.1.4, die den Kernel auf einem jffs2-Filesystem unter dem Namen /boot/uImage erwartet.
Solange keine neue Kernel-Version geflasht ist, muss daher der generierte Kernel an die vorgesehene Stelle kopiert und dann ein neues Root-Filesystem generiert werden. Das kann dann in gewohnter Weise geflasht werden.
Hier der Vorgang:
root@ezs-mobil:/home/quade/gumstix/gumstix-buildroot# cp uImage build_arm_nofpu/root/boot/ root@ezs-mobil:/home/quade/gumstix/gumstix-buildroot# vi build_arm_nofpu/root/etc/modprobe.conf ... root@ezs-mobil:/home/quade/gumstix/gumstix-buildroot# rm rootfs.arm_nofpu.jffs2 root@ezs-mobil:/home/quade/gumstix/gumstix-buildroot# make ...
(/home/quade/) C-Kermit> send GUM>loadb a2000000 (/home/quade/) C-Kermit> send rootfs.arm_nofpu.jffs2 (/home/quade/) C-Kermit> connect GUM>pro on 1:0-1 && jera all && cp.b a2000000 40000 ${filesize} ... GUM>boot